首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angular 5测试-全局配置测试床

angular 5测试-全局配置测试床
EN

Stack Overflow用户
提问于 2017-11-09 22:30:40
回答 3查看 3.7K关注 0票数 8

我想在angular-cli@1.50项目中为所有测试套件导入某些模块,如ngrx Store、ngx translate或httpClientModule。

在生成的test.ts中,我添加了一个test.configureTestingModule

代码语言:javascript
复制
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

代码语言:javascript
复制
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,以避免导入重复的模块?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2018-04-06 05:50:01

简而言之,TestBed挂钩到Jasmine的beforeEachafterEach回调中,这将在每次测试之间重置测试模块。这为您的每个单元测试提供了一张白纸。

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

我是shallow-render的开发人员,它通过使用Shallow.alwaysProvide()在您的测试环境中全局设置/覆盖/模拟提供程序和forRooted提供程序,为此提供了解决方案。测试模块设置的其余部分由库处理。

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

希望这能有所帮助。

票数 4
EN

Stack Overflow用户

发布于 2020-10-07 19:33:02

另一个答案涵盖了configureTestingModule在单独测试之前/之后的工作方式,但您不必使用插件来进行简单的“始终提供”模块设置。我在我的测试配置中创建了一个paths别名:

代码语言:javascript
复制
        "paths": {
            "@testing": ["src/testing/index"],
            "@testing/*": ["src/testing/*"]
        }

这让我可以编写一个包含所有共享导入的TestModule模块:

代码语言:javascript
复制
@NgModule({
  imports: [
    // All repeated modules
  ],
})
export class TestModule { }

然后,每个对configureTestingModule的调用只需要import { TestCommon } "@testing/test-common.module",并将其包含在测试模块配置的imports部分中。

票数 0
EN

Stack Overflow用户

发布于 2020-11-15 00:01:11

没有必要为了实现这一点而去寻找一个单独的库。你可以通过创建一个通用的angular模块来创建一个全局TestBed,在这个模块中你可以定义一个实用方法。此实用程序方法创建TestBed,然后可以在所有等级库文件中重复使用它。

您可以参考下面的答案,其中还包括示例代码:https://stackoverflow.com/a/64835814/4184651

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47204406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档