我正在使用带有弹簧引导的Angular CLI + Angular 2。我的应用程序按预期运行,没有问题。
但问题是,如果我运行ng test
,我会收到以下异常:
Could not start watchman; falling back to NodeWatcher for file system events. Visit http://ember-cli.com/user-guide/#watchman for more info.
Built project successfully.
Stored in "dist". Build successful - 1128ms.
07 07 2016 17:25:14.398:WARN [karma]: No captured browser, open http://localhost:9876/
07 07 2016 17:25:14.418:INFO [karma]: Karma v0.13.22 server started at
07 07 2016 17:25:14.423:INFO [launcher]: Starting browser Chrome 07 07 2016 17:25:16.514:
INFO [Chrome 51.0.2704 (Mac OS X 10.11.5)]: Connected on socket /#0TaliUxVtqlcFROBAAAA with id 93440436
Chrome 51.0.2704 (Mac OS X 10.11.5) AccountSummary Service should ... FAILED
Error: No provider for Http! (AccountSummaryService -> Http)
错误:DI 异常'
因为,angular-CLI 创建了没有注入 Http 模块的默认 account-summary-service.spec 文件。
如果注释掉以下代码:
// beforeEachProviders(() => [AccountSummaryService]);
//
// it('should ...',
// inject([AccountSummaryService], (service: AccountSummaryService) => {
// expect(service).toBeTruthy();
// }));
不会有错误。
或
在测试中也注入 Http 服务。此服务的测试如下所示:
describe('AccountSummaryService Service', () => {
let accountSummaryService: AccountSummaryService;
let mockBackend: MockBackend;
const mockHttpProvider = {
deps: [MockBackend, BaseRequestOptions],
useFactory: (backend: MockBackend, defaultOptions: BaseRequestOptions) => {
return new Http(backend, defaultOptions);
}
}
beforeEachProviders(() => [
MockBackend,
BaseRequestOptions,
provide(Http, mockHttpProvider),
AccountSummaryService
]);
beforeEach(inject([AccountSummaryService, MockBackend], (a, m) => {
accountSummaryService = a;
mockBackend = m;
}));
it('should ...', async(() => {
expect(accountSummaryService).toBeTruthy();
}));
});