У меня есть приложение Angular, и при запуске модульных тестов с Karma я получаю сообщение о том, что в компоненте отсутствует поставщик Store для компонента.
Хранилище напрямую не внедряется в компонент, а в сервис, который внедряется в компонент.
Если я импортирую StoreModule в компонент, ошибка исчезнет, но я не должен был этого делать, так как компонент не требует хранилища напрямую.
Ошибка:
Ошибка: StaticInjectorError (DynamicTestModule) [StoreRootModule -> Store]:
StaticInjectorError (Платформа: ядро) [StoreRootModule -> Store]:
NullInjectorError: Нет провайдера для магазина!
Компонент
export class TestComponent {
constructor(private testService: TestService) {}
}
Услуги
@Injectable({
providedIn: 'root'
})
export class TestService {
constructor(private store: Store<AppState>) {}
}
тестирование компонентов блока
class MockTestService {
}
describe('TestComponent', () => {
let component: TestComponent;
let fixture: ComponentFixture<TestComponent>;
let resetMemorablePhraseService: MockTestService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TestComponent],
imports: [
// StoreModule.forRoot({}) // adding this line gets rid of the error
],
providers: [{
provide: TestService, useClass: MockTestService
}]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
fixture.detectChanges();
service = TestBed.get(TestService);
});
}