Han*_*Che 7 unit-testing testbed typescript karma-jasmine angular
我想为所有测试套件导入某些模块,例如 ngrx Store、ngx translate 或 httpClientModule 在 angular-cli@1.50 项目中使用 angular 5。
在生成的 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]
}
}),
]
}
Run Code Online (Sandbox Code Playgroud)
仍然在 user.servive.spec.ts 中,它说 Store 没有提供者。
用户服务规范
describe('UserService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [UserService]
});
});
it('should be created', inject([UserService], (service: UserService) => {
expect(service).toBeTruthy();
}));
});
Run Code Online (Sandbox Code Playgroud)
user.service.spec 中的 Test.configureTestingModule 是否“覆盖”了 test.ts 中的那个?
如果是这样,我如何在全局级别配置 TestBed 以避免导入重复模块?
谢谢!
简短的答案是TestBed
挂钩 JasminebeforeEach
和afterEach
回调,在每次测试之间重置测试模块。这为您的每个单元测试提供了一个干净的状态。
这意味着您不能TestBed.configureTestingModule
在 test.ts 文件中使用。您必须手动为每个规范执行此操作,或编写自己的默认测试设置实用程序来处理它。
我是开发人员,通过使用全局设置/覆盖/模拟提供程序,shallow-render
确实有一个解决方案Shallow.alwaysProvide()
forRoot
,通过在测试环境中测试模块设置的其余部分由库处理。
https://github.com/getsaf/shallow-render#global-providers-with-alwaysprovide
希望这可以帮助。
归档时间: |
|
查看次数: |
3530 次 |
最近记录: |