单元测试:即使添加到"提供者",也没有"InterceptableStoreFactory"的提供者

fir*_*baa 6 unit-testing fixtures jasmine testbed angular

我正在Angular应用程序中进行单元测试,我正在使用TestBed方法,

我正在测试组件,所以每个spec文件都是这样的

import...
describe('AppComponent', () => {
// Importing dependecies
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            imports : [RouterTestingModule , HttpModule , FormsModule ],
            declarations: [AppComponent
            ],
            providers: [AUTH_PROVIDERS ,UserService, SharedclientService, RouteNavigator, JwtHelper, ReloadTokenService, ShopService
                , EnvVarsService, ProfileService, LocalStorageService, ApiVersionInterceptor, ApiTrackingInterceptor, MonitoringService ,
                { provide: 'LOCAL_STORAGE_SERVICE_CONFIG', useValue: userConfig } , TokenUtilService , HttpInterceptorService ,
                { provide: InterceptableStoreFactory, useClass: InterceptableStoreFactoryMock },ReloadTokenEventService , InterceptableStoreFactory

            ]

        }).compileComponents();
    }));
    // detecting changes every times
    beforeEach(() => {
        fixture = TestBed.createComponent(AppComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    // Test case 0 (compilation of the component)
    it('AppComponent is well defined', () => {
        expect(component).toBeDefined();
    });

    // Test case 1
    it('test', () => {
        expect("1").toBe("1");
    });
});
Run Code Online (Sandbox Code Playgroud)

如果依赖项导入不好,这种测试方法会导致整个测试套件失败.

例如:在此测试套件中,它会抛出此错误:

没有InterceptableStoreFactory的提供者!这似乎很奇怪,因为我在我的供应商中导入此服务(最后一个)

这导致几乎所有测试用例的失败,因为夹具导入的验证是" beforeEach "测试用例

我正在寻找更好的想法:

  1. "没有服务提供者"的问题(已经添加到提供者"

并为

  1. 单元测试更好的测试方法

jor*_*are 3

您提供 InterceptableStoreFactory 两次。一次是模拟替代品,一次是原始版本。尝试删除其中之一。

它可以帮助您为所有服务创建一个模块并将其放入“核心”文件夹中。(参见Angular 风格指南

这使得在测试和开发/生产中提供所有正确的服务变得更容易,而无需重复太多。