问题描述
所以这是一个奇怪的案例,声明没有被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方法。
您需要返回以下内容:
spyOn(document,"querySelectorAll").and.callFake(function() {
return [{ // note the array here
value: true,classList: {
remove: () => {},add: () => {},contains: () => { return ["a-class-name"] }
}
}]
});