javascript - 如何用玩笑测试传递给 document.body.appendChild 的参数
问题描述
我有一个创建脚本元素并将其添加到正文的函数。它看起来有点像这样:
const s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'https://myscript';
s.id = 'abc';
document.body.appendChild(s);
我正在使用 jest 进行测试,并且正在监视appendChild
函数以断言传入的参数是我所期望的。我所拥有的看起来像这样:
jest.spyOn(document.body, 'appendChild');
doFunction();
expect(document.body.appendChild).toBeCalledWith(
'<script id="abc" src="https://myscript" type="text/javascript" />',
);
尽管字符串匹配,但传入的参数appendChild
不是字符串,而是对象。
typeof document.body.appendChild.mock.child[0][0] // object
我也尝试过对一个对象进行断言({ type: '...' }
没有运气。还有什么其他选项可以开玩笑地测试这段代码?
解决方案
正如@Alex 指出的那样,document.createElement
创建一个HTMLScriptElement
对象。
您可以HTMLScriptElement
通过使用以下命令检查其属性来测试是否已正确创建expect.objectContaining
:
const doFunction = () => {
const s = document.createElement('script');
s.type = 'text/javascript';
s.src = 'https://myscript';
s.id = 'abc';
document.body.appendChild(s);
}
test('doFunction', () => {
jest.spyOn(document.body, 'appendChild');
doFunction();
expect(document.body.appendChild).toBeCalledWith(
expect.objectContaining({
type: 'text/javascript',
src: 'https://myscript/',
id: 'abc'
})
); // Success!
});
推荐阅读
- python - 换行符和 StringIO
- groovy - groovy - 从 jmx 加载时替换 json 中的值
- c++ - C++ 指针:地址 - 地址混淆
- swift - 使用绑定/演示模式从 SwiftUI 中关闭 UIViewController 工作表?
- asp.net-core - RequireAuthorization 和 Swashbuckle IOperationFilter
- c# - c# - 如何从锯齿状数组中为c#中的文本框设置值?
- r - R Markdown 无法编织到 PDF - tmlr 中的错误
- android - 我从 getCurrentPositionAsync() 得到的精度非常低,有时超过 2000m。我该如何改进呢?
- python - 如何从 Python 函数运行 Behave 测试?
- c# - 如何使用 Azure Function 从网站下载文件