运行单元测试时收到以下错误:
Error: StaticInjectorError(DynamicTestModule)[BlogService -> Store]:
StaticInjectorError(Platform: core)[BlogService -> Store]:
NullInjectorError: No provider for Store!
这是我的测试文件中的代码:
import { TestBed, inject } from '@angular/core/testing';
import { BlogService } from './blog.service';
describe('BlogService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [BlogService]
});
});
it('should be created', inject([BlogService], (service: BlogService) => {
expect(service).toBeTruthy();
}));
});
我不确定为什么会发生此错误。我以为“注入”调用可实例化服务。
答案 0 :(得分:3)
如here
所述Add following to the specs.ts file:
// Add the import the module from the package
import { StoreModule } from '@ngrx/store';
// Add the imported module to the imports array in beforeEach
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
StoreModule.provideStore({})
],
declarations: [
// The component that's being tested
]
})
.compileComponents();
}));
如果出现错误Property 'provideStore' does not exist on type 'typeof StoreModule
,请使用instead
的forRoot provideStore
。
还要看看here,这是类似的问题here。
干杯!
答案 1 :(得分:2)
如果服务引用的是ngrx存储,则需要导入ngrx模块。我现在假设您正在AppModule中进行此操作。您需要在TestBed模块中复制它。我通常会创建一个测试ngrx模块来完成所有这些工作,然后将其导入任何引用Store的规范文件中
答案 2 :(得分:1)
您可以使用ngrx模拟存储:
import { provideMockStore } from '@ngrx/store/testing';
beforeEach(() => {
TestBed.configureTestingModule({
providers: [provideMockStore({})],
});
});
您可以定义一个特定的状态并将其作为方法参数传递。