【发布时间】:2021-01-11 13:12:30
【问题描述】:
所以这是一个奇怪的例子,一个语句没有被 jasmin karma 测试运行器覆盖,这是正在测试的函数
aFunction(fewParams) {
if (fewCondition) {
let elements = document.querySelectorAll(`[id^=${aParam}]`);
let anElement = find(elements, (el) => el.classList.contains('a-class-name'));
if (anElement) {
/* rest of the logic */
}
if (updatedConditions) {
/*rest of the logic*/
}
}
}
这是测试
describe('aFunction', () => {
it('it should do aFunctionality', () => {
spyOn(document, "querySelectorAll").and.callFake(function() {
return {
value: true,
classList: {
remove: () => {},
add: () => {},
contains: () => { return ["a-class-name"] }
}
}
});
componentInstance.aFunction("test", 1, true);
expect(componentInstance.something).toBe(soemthing);
});
});
所以问题就在这里
if (anElement) {
}
即使 querySelectorAll 的模拟函数返回具有所需值的类列表,也不会覆盖语句。
你能帮我解决这个问题吗?
【问题讨论】:
-
与上一期类似,您的 querySelectorAll 仅返回一个元素,因此未定义 find,您需要返回一个列表,以便 find 实际返回一个元素 :)
-
所以我需要在 ["a-class-name"] 数组中添加另一个元素吗?
标签: angular jasmine karma-jasmine istanbul