angular - 无法使用 jasmine 断言嵌套方法调用
问题描述
我正在尝试使用 jasmine 为我的 angular5 Web 应用程序编写单元测试。
代码分为 3 个文件,即utilityFile.ts
,component.ts
和component.spec.ts
实用程序文件.ts:
export class UtilityFile{
constructor(){}
parse(){
// do somthing
}
}
组件.ts:
export class Component{
uf = new UtilityFile();
constructor(){}
runParse(){
uf.parse(); // <-- trying to test if this method has been called
}
}
组件.spec.ts:
describe('test runParse()',()=>{
let comp:Component;
beforeAll(()=>{
comp = new Compnent();
comp.runParse();
})
it('should call uf.parse()', ()=>{
spyOn(comp.uf, 'parse');
expect(comp.uf.parse).toHaveBeenCalled(); // <-- test fails
})
})
相关包:
"@types/jasmine": "~2.8.3",
"@types/jasminewd2": "~2.0.2",
"jasmine-core": "~2.8.0",
"jasmine-spec-reporter": "~4.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
我感谢每一个提示。
解决方案
将您的移动spy
到beforeAll
块,您调用的位置runParse()
。因为首先runParse()
调用uf.parse()
,当时没有spy
创建需要提防。所以spy
应该在它被调用之前创建。
describe('test runParse()',()=>{
let comp:Component;
beforeAll(()=>{
comp = new Compnent();
spyOn(comp.uf, 'parse'); // create spy before calling runParse()
comp.runParse();
})
it('should call uf.parse()', ()=>{
expect(comp.uf.parse).toHaveBeenCalled(); // should pass now
})
})
推荐阅读
- php - PHP,在具有相同名称的 HTML 标签之间提取数据
- java - AWS Aurora Serverless Spring Boot 通信链路错误
- python - ValueError:检查输入时出错:预期dense_1_input的形状为(1,)但得到的数组形状为(5000,)
- json - 错误错误:找不到类型为“对象”的不同支持对象“[对象对象]”。NgFor 仅支持绑定到 Iterables Angular 9
- rust - 在另一种支持泛型的类型中使用 impl Trait
- python - 注释和 for 循环在 Azure 函数“main”方法中不起作用
- ruby - 打开新标签后,ruby watir 中的无头 chrome 浏览器没有响应
- javascript - 如何在 jS if 语句中检查 JSON 字符串值?
- php - 如何在 Oracle SQL 计数中使用计算值
- javascript - 每次渲染后会调用哪个 useEffect?