Издевательский магазин NgRx со зрителем - PullRequest
2 голосов
/ 02 апреля 2020

Я пытаюсь написать модульные тесты вместе с Angular, Jest и Spectator. Прямо сейчас я борюсь с издевательским магазином NgRx. Я получаю сообщение об ошибке «Нет поставщика для MockStore» при попытке получить экземпляр NgRx, предоставленный MockStore из экземпляра Spectator.

Я прочитал документацию по NgRx, касающуюся макетов и юнит-тестов, и я могу издеваться над хранилищем NgRx без использования Spectator, читая документацию. Я пытался поискать в Google, но не могу найти примеры насмешливого хранения NgRx вместе со Spectator, и я оставил сообщение в NgRx / store Gitter, чтобы посмотреть, сможет ли кто-нибудь там помочь мне.

Вот как выглядит мой код:

    let component: MyComponent;
    let spectator: Spectator<MyComponent>;
    let mockStore: MockStore<selectors.AppState>;
    let mockUsernameSelector: MemoizedSelector<AppState, string>;

    const createComponent = createComponentFactory({
        component: MyComponent,
        componentProviders: [
            provideMockStore(),
        ],
        shallow: true,
        detectChanges: false,
    });

    beforeEach(() => {
        spectator = createComponent();
        component = spectator.component;
        mockStore = spectator.inject<MockStore<selectors.AppState>>(MockStore);
        mockUsernameSelector = mockStore.overrideSelector(selectors.selectUserName, 'Bob');
    });

Но, как я уже сказал, как только я пытаюсь получить экземпляр MockStore от Spectator через spectator.inject (также пытался spectator.get), я получаю ошибку "Нет поставщика для MockStore". Я также пытался указать MockStore следующим образом:

    const createComponent = createComponentFactory({
        component: MyComponent,
        componentProviders: [
            mockProvider(MockStore, provideMockStore()),
        ],
        shallow: true,
        detectChanges: false,
    });

Но тогда я получаю сообщение об ошибке «Нет поставщика для Магазина», очевидно.

Возможно, кто-то здесь может Помоги мне? Заранее спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете использовать удобную функцию mockProvider .

В массиве провайдеров:

import { createComponentFactory, mockProvider, Spectator, SpyObject } from '@ngneat/spectator/jest';
import { Store } from '@ngrx/store';

providers: [mockProvider(Store)],
...