Карма жалуется на отсутствие поставщика в компоненте, но поставщик не вводится напрямую в компонент - PullRequest
0 голосов
/ 28 августа 2018

У меня есть приложение 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);
    });
}

1 Ответ

0 голосов
/ 28 августа 2018

Если вы используете какой-либо компонент, поставщик внутри любого другого модуля, вам нужно импортировать этот конкретный модуль при импорте,

В противном случае он не найдет определенного поставщика и выдаст ошибку. Вышеуказанная проблема является обычной. Для ее решения импортируйте модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...