не может утверждать вызов вложенного метода с жасмином - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь написать модульный тест для моего веб-приложения angular5 с использованием жасмина.

Код разбит на 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",

Я благодарен за каждый намек.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Переместите 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
    })
})
0 голосов
/ 27 августа 2018

Проблема в блоке describe.

Я должен был создать spy и только тогда Я должен был вызвать функцию. Тогда как в моем вопросе я вызываю функцию, а потом создаю spy и утверждаю ее.

...