Angular 5 测试 - 全局配置测试平台

标签 angular typescript unit-testing karma-jasmine testbed

我想在 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 的 beforeEachafterEach 回调中,在每次测试之间重置测试模块。这为每个单元测试提供了一个全新的平台。

这意味着您不能在 test.ts 文件中使用 TestBed.configureTestingModule。您必须手动为每个规范执行此操作或编写您自己的默认测试设置实用程序来处理它。

我是 shallow-render 的开发者通过使用 Shallow.alwaysProvide() 在您的测试环境中全局设置/覆盖/模拟提供者和 forRooted 提供者,它确实有一个解决方案。其余的测试模块设置由库处理。

https://github.com/getsaf/shallow-render#global-providers-with-alwaysprovide

希望这对您有所帮助。

关于 Angular 5 测试 - 全局配置测试平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204406/

相关文章:

angular - 默认情况下使用 http 运行时如何使用 https 运行 Angular?

typescript - Angular2 导入路径在运行时错误

node.js - npm run build 期间 docker build 中的 Typescript 错误

java - 合并来自多个 Jenkins 作业的测试覆盖率和测试结果

unit-testing - 您是否应该显示单元测试在运行时发生的情况?

javascript - 如何在 Jest 中重置手动模拟

angular - ionic 3 : The pipe '' could not be found

Angular 4在路由模块中使用服务

typescript - 如何查看 Typescript 类型的完整扩展合约?

angular - 解决超过 6 个 forkJoin 参数的问题?