Нет провайдера для MockState - PullRequest
       0

Нет провайдера для MockState

1 голос
/ 14 января 2020

Я все еще выясняю, что касается Angular Модульного тестирования. Я считаю, что я впервые пишу модульный тест для сервиса с нуля. Я скопировал / вставил код другого пользователя и попытался его адаптировать. Вот что у меня есть:

describe('SERVICE -> EditServiceProcedureAuthorizationService', () => {
    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [HttpClientModule],
            providers: [
                EditServiceProcedureAuthorizationService,
                { provide: Store, useClass: MockStore },
                { provide: AuthorizationsService, useClass: MockAuthorizationsService },
                { provide: ServiceProcedureAuthorizationWorkflowService, useClass: ServiceProcedureAuthorizationWorkflowServiceMock },
                { provide: SpViewAuthorizationDetailsService, useClass: MockSpViewAuthorizationDetailsService }
            ]
        });
    });

    it('should loadAuthorization()', inject(
        [EditServiceProcedureAuthorizationService, Store, AuthorizationsService, ServiceProcedureAuthorizationWorkflowService,
                 SpViewAuthorizationDetailsService],
        fakeAsync(
            (
                editServiceProcedureAuthorizationService: EditServiceProcedureAuthorizationService,
                mockStore: MockStore<AppStore>,
                mockAuthorizationService: MockAuthorizationsService,
                mockServiceProcedureAuthWorkflowService: ServiceProcedureAuthorizationWorkflowServiceMock,
                mockSpViewAuthorizationDetailsService: MockSpViewAuthorizationDetailsService
            ) => {
                const dispatchSpy: Spy = spyOn(mockStore, 'dispatch');
                editServiceProcedureAuthorizationService.loadAuthorization(undefined, undefined);
                expect(dispatchSpy).not.toHaveBeenCalled();

                const memberId = '42';
                const authId = 'auth42';

                editServiceProcedureAuthorizationService.loadAuthorization(memberId, authId);
                expect(dispatchSpy).toHaveBeenCalledTimes(1);
            }
        )
    ));
});

Затем, когда я попытался запустить это, я получил:

Error: StaticInjectorError(DynamicTestModule)[Store -> MockState]: 
  StaticInjectorError(Platform: core)[Store -> MockState]: 
    NullInjectorError: No provider for MockState!
    at NullInjector.get node_modules/@angular/core/fesm5/core.js:8894:1)
    at resolveToken node_modules/@angular/core/fesm5/core.js:9139:1)
    at tryResolveToken node_modules/@angular/core/fesm5/core.js:9083:1)
    at StaticInjector.get node_modules/@angular/core/fesm5/core.js:8980:1)
    at resolveToken node_modules/@angular/core/fesm5/core.js:9139:1)
    at tryResolveToken node_modules/@angular/core/fesm5/core.js:9083:1)
    at StaticInjector.get node_modules/@angular/core/fesm5/core.js:8980:1)
    at resolveNgModuleDep node_modules/@angular/core/fesm5/core.js:21120:1)
    at _createClass node_modules/@angular/core/fesm5/core.js:21173:1)
    at _createProviderInstance node_modules/@angular/core/fesm5/core.js:21137:1)

Я гуглил это, и самое близкое, что я нашел, было это: Angular - Карма - ngrx - Нет провайдера для Магазина , но не думаю, что это применимо.

Действительно не уверен, что попробовать дальше.

1 Ответ

0 голосов
/ 15 января 2020

Как отмечает @ AliF50, проблема заключалась в том, что MockStore использует MockState. Добавление этого создало каскад вещей, которые нужно было добавить, и создало проблему InjectionToken.

Я наконец выбрал выход из труса и реализовал свой собственный TestMock для инъекций, и все работает нормально.

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