1
我试图建立我@Injectable
存储服务的测试。测试异步注射服务
@Injectable()
export class StorageService {...
constructor(private platform: Platform,
public instanceService: InstanceService,
private logger: LoggingService,
private database: SQLite = null) {... //injecting a db mock
我已经创建了成功测试了几个版本,但我知道他们只许成功,因为他们是异步并且误报的错误。
这里的设置。
describe('Storage Service tests',() => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [],
providers: [
StorageService,
{ provide: Platform, useClass: PlatformMock },
{ provide: InstanceService, useClass: InstanceServiceMock },
{ provide: LoggingService, useClass: LoggingServiceMock },
{ provide: ConfigurationService, useClass: ConfigurationServiceMock },
{ provide: SQLite, useClass: DBMock },
MockBackend,
BaseRequestOptions,
{
provide: Http,
useFactory: (mockBackend, options) => {
return new Http(mockBackend, options);
},
deps: [MockBackend, BaseRequestOptions]
}
],
imports: [
HttpModule
]
}).compileComponents();
}));
在这里,我想测试setFailedImageUpdate
我挣扎知道如何既注入的服务,所以它初始化和传中done
用于异步完成。
it('should set failed image', (done) => {
let cu = new UnsavedImageUpdate();
inject([StorageService, MockBackend], (storageService, mockBackend) => {
storageService.db = new DBMock();
storageService.setFailedImageUpdate([cu]).then((res) => {
expect(res).toEqual("1234");
done();
})();
})
});
我得到这个迭代的错误是:
Error: Timeout - Async callback was not invoked within timeout
specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
如何将我的测试设置以共同喷射StorageService
和传中done
?
编辑:试图跟随@学习者的建议,我创造了这个:
it('should set failed image', async() => {
let cu = new UnsavedImageUpdate();
var storageService = TestBed.get(StorageService);
storageService.db = new DBMock();
storageService.setFailedImageUpdate([cu]).then((res) => {
expect(res).toEqual("1234");
})
});
测试成功,但是当我调试到它,我得到这个错误:
'expect' was used when there was no current spec,
this could be because an asynchronous test timed out
你可以模拟一个样本? – paqogomez
明白了!谢谢!! – paqogomez
我很想看到一个版本的W/O完成,如果你想给它一个镜头。 – paqogomez