无法断言使用茉莉花嵌套的方法调用

时间:2018-08-27 14:06:50

标签: angular unit-testing angular5 karma-jasmine

我正在尝试使用茉莉花为我的angular5 Web应用程序编写单元测试。

代码分为3个文件,即utilityFile.tscomponent.tscomponent.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",

我很感谢每一个提示。

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
    })
})