我正在为angular2 - karma - jasmine写单元测试。
我在服务调用API时使用mockBackend
来响应数据。
这是我的代码
function Connection(mockBackend) {
connection.mockRespond(new Response(
new ResponseOptions({
body: JSON.stringify(lookup)
}
)));
});
}
describe('Update Contact Details Test', () => {
let fixture, comp;
beforeEach(async(inject([MockBackend], (mockBackend: MockBackend) => {
Connection(mockBackend);
TestBed.configureTestingModule({
declarations: [ ContactFieldListComponent ],
providers: _.union(DEFAULT_PROVIDERS, [FieldService, LookupsService, ContactService]),
schemas: [CUSTOM_ELEMENTS_SCHEMA],
imports: DEFAULT_IMPORT
})
.compileComponents().then(() => {
fixture = TestBed.createComponent(ContactFieldListComponent);
comp = fixture.componentInstance;
});
})));
it('get contact field list', () =>
expect(1).toBe(1);
});
});
它无法处理错误Error: No provider for MockBackend!
我该如何解决?
答案 0 :(得分:4)
看起来您错过了将MockBackend添加到TestBed的提供程序中。
...
TestBed.configureTestingModule({
declarations: [ ContactFieldListComponent ],
providers: _.union(
DEFAULT_PROVIDERS, [
FieldService,
LookupsService,
ContactService,
MockBackend // <- add it here
]),
schemas: [CUSTOM_ELEMENTS_SCHEMA],
imports: DEFAULT_IMPORT
})
...
另外我认为你必须在TestBed
下创建另一个beforeEach,因为在第一个中,MockBackend没有注册。
我为您准备了一个示例测试,或许可以帮助您:https://github.com/angular-workshops/angular2-testing/blob/solution/tour-of-heroes/src/app/hero.service/hero.service.shallow.spec.ts