spyOn函数未调用

问题描述 投票:-1回答:1

我有一个功能

getList() {
        return this.listFactory
            .fetchList()
            .then((data) => this.generateDsisplay(data));
}

并且已经嘲笑了fetchList返回

mocktListRepository.fetchList.and.returnValue(PromiseUtil.transformAsResolvedPromise(listPage));

但是在我的单元测试中仍然失败。我不知道为什么。测试将调用generateDsisplay

describe('getList()', () => {
        it('should call generateDsisplay', () => {           
            spyOn(component, 'generateDsisplay');

            component.getList();

            expect(component.generateDsisplay).toHaveBeenCalled();
        });
    });
angular unit-testing karma-runner
1个回答
0
投票

异步方法调用this.listFactory.fetchList()需要在单元测试中同步。使用fakeAsync中的tick@angular/core/testing,可以执行以下操作。

import { fakeAsync, tick} from '@angular/core/testing';
describe('getList()', fakeAsync(() => {
    it('should call generateDsisplay', () => {           
        spyOn(component, 'generateDsisplay');

        component.getList();
        tick();

        expect(component.generateDsisplay).toHaveBeenCalled();
    }));
});

或者,您也可以如下尝试async/await

 describe('getList()', async () => {
        it('should call generateDsisplay', () => {           
            spyOn(component, 'generateDsisplay');

            await component.getList();

            expect(component.generateDsisplay).toHaveBeenCalled();
        });
 });
© www.soinside.com 2019 - 2024. All rights reserved.