我想在 Angular 为 5 的 angular-cli@1.50 项目中为所有测试套件导入某些模块,例如 ngrx Store、ngx translate 或 httpClientModule。
在生成的 test.ts 中我添加了一个 test.configureTestingModule
const testBed: TestBed = getTestBed();
testBed.initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
testBed.configureTestingModule({
imports: [
HttpClientModule,
StoreModule.forRoot(reducers, { metaReducers }),
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
}
}),
]
}
仍然在 user.servive.spec.ts 中它说没有商店的提供者。
user.service.spec.ts
describe('UserService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [UserService]
});
});
it('should be created', inject([UserService], (service: UserService) => {
expect(service).toBeTruthy();
}));
});
user.service.spec 中的 Test.configureTestingModule 是否“覆盖”了 test.ts 中的那个?
如果是这样,我如何在全局级别配置 TestBed 以避免导入重复模块?
谢谢!
最佳答案
简短的回答是 TestBed
挂接到 Jasmine 的 beforeEach
和 afterEach
回调中,在每次测试之间重置测试模块。这为每个单元测试提供了一个全新的平台。
这意味着您不能在 test.ts 文件中使用 TestBed.configureTestingModule
。您必须手动为每个规范执行此操作或编写您自己的默认测试设置实用程序来处理它。
我是 shallow-render
的开发者通过使用 Shallow.alwaysProvide()
在您的测试环境中全局设置/覆盖/模拟提供者和 forRoot
ed 提供者,它确实有一个解决方案。其余的测试模块设置由库处理。
https://github.com/getsaf/shallow-render#global-providers-with-alwaysprovide
希望这对您有所帮助。
关于 Angular 5 测试 - 全局配置测试平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204406/