所以我有一项服务:
@injectable()
export class MyService {
public go() : Observable { /* does not complete returned observable */ }
}
我对其方法的可观察完成情况进行了测试:
it('should complete', inject([MyService], (s : MyService) => {
s.go()
.timeout(10, 'did not complete')
.subscribe(
undefined,
// if observable failed on timeout, fail test
e => e == 'did not complete' && fail(e)
);
}));
虽然我们希望测试失败,但它会成功完成,因为在测试完成后调用了失败函数。
通常我们会使用jasmine
done
来解决此问题,但假设我想使用角度inject
函数,那怎么能完成?
修改:使用有角度的async
和fakeAsync
也没有做到这一点,因为Observable
' s timeout
试图设置间隔,这些区域是不允许的。
答案 0 :(得分:3)
如果您想明确使用done
,可以,但我不知道如何使其与inject
方法兼容。您可以做的是处理inject
中的beforeEach
,或者您可以从测试台获取服务(其作用类似于注射器)
使用beforeEach
:
let service;
beforeEach(inject([MyService], (s : MyService) => {
service = s;
}))
it('...', (done) => {
})
从试验台获得服务:
import { getTestBed } from '@angular/core/testing';
let service;
beforeEach(() => {
TestBed.configureTestingModule({
...
})
let injector = getTestBed();
service = injector.get(MyService);
})
it('...', (done) => {
})