我正在尝试使用茉莉花为我的angular5 Web应用程序编写单元测试。
代码分为3个文件,即utilityFile.ts
,component.ts
和component.spec.ts
utilityFile.ts:
export class UtilityFile{
constructor(){}
parse(){
// do somthing
}
}
component.ts:
export class Component{
uf = new UtilityFile();
constructor(){}
runParse(){
uf.parse(); // <-- trying to test if this method has been called
}
}
component.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",
我很感谢每一个提示。
答案 0 :(得分:0)
describe
块中的问题。
我必须创建spy
,然后只有这样,我才调用了该函数。而在我的问题中,我调用该函数,然后创建spy
并声明它。
答案 1 :(得分:0)
将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
})
})