我正在注入这样的服务:
it('name of test', inject([ Service], (hcs: Service) => {
const pipe = new MyPipe(hcs);
const expectedResult = ...
//Here the constructor of the hcs-service has to be completet, otherwise the Pipe fails
const result = pipe.transform(...);
expect(result).toEqual(expectedResult);
}));
在开始执行管道的transform方法之前,我需要运行服务的构造函数。在运行时期间,这不是问题,因为此管道始终是对用户操作的反应。但是在我的测试中,它失败了,因为构造函数还没有运行。
什么是解决这个问题的好方法?
编辑:正如Arif在评论中指出的那样。问题是我的构造函数执行异步任务。谢谢 :)
始终首先执行Object的构造函数。除非你有异步代码。
正如您在评论中提到的,这是您案例中的问题。
要等待测试异步功能完成,你必须使用fakeAsync和tick
it('name of test', fakeAsync(inject([ Service], (hcs: Service) => {
const pipe = new MyPipe(hcs);
tick();
const expectedResult = ...
//Here the constructor of the hcs-service has to be completet, otherwise the Pipe fails
const result = pipe.transform(...);
expect(result).toEqual(expectedResult);
})));