Непредвиденные ошибки при тестировании магазина макетов ngrx - PullRequest
0 голосов
/ 28 февраля 2020

Я думаю, что нашел решение, go к концу вопроса

У меня есть простой тест с жасминовыми шариками, и я получаю эту ошибку, и я не знать, что происходит. Есть идеи?

Ожидается, что $ [0] .notification.kind = 'E' равно 'N'.

Ожидается $ [0] .notification.value = не определено равным [].

Ожидается $ [0] .notification.error = TypeError: Невозможно прочитать свойства 'пулов' неопределенных в равные неопределенным.

Ожидаемые $ [0] .notification.hasValue = false равно true.

pool-management.component.ts

    @Component({
  selector: 'app-pool-list',
  templateUrl: './pool-list.component.html',
  styleUrls: ['./pool-list.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class PoolListComponent implements OnInit {

  pools$ = this.store.pipe(select(selectPools));

  constructor(private store: Store<fromPoolManagement.State>) { }

  addPool(): void {
    this.store.dispatch(PoolManagementActions.addPool({lot: 'XXX', user: 'XYZ', cutDate: new Date().toISOString()}));
  }

  ngOnInit(): void {
    this.store.dispatch(PoolManagementActions.getPools());
  }

}

pool-management.selectors.ts

export const poolManagementSelector = createFeatureSelector('poolManagement');

export const selectPools = createSelector(
  poolManagementSelector,
  (state: State) => state.pools
);

pool-list.component.spe c .ts

fdescribe('PoolListComponent', () => {
    let component: PoolListComponent;
    let fixture: ComponentFixture<PoolListComponent>;
    let mockStore: MockStore<fromPoolManagement.State>;

    beforeEach(() => {
      const initialState = { pools: [] } as fromPoolManagement.State;
      TestBed.configureTestingModule({
        declarations: [PoolListComponent],
        providers: [provideMockStore({ initialState })],
      })
        .compileComponents();
      fixture = TestBed.createComponent(PoolListComponent);
      component = fixture.componentInstance;
      mockStore = TestBed.get(Store);
      fixture.detectChanges();
    });

    it('should create', () => {
      expect(component).toBeTruthy();
    });

    it('should work, but this test is not working', () => {
      const expected = cold('a', { a: []});
      expect(component.pools$).toBeObservable(expected);
    });

    afterEach(() => {
      fixture.destroy();
    });

  });

console.log («ожидается», ожидается);

enter image description here

1 Ответ

0 голосов
/ 09 марта 2020

Поскольку мой app.module имеет

StoreModule.for Root ([]),

, и я пытался проверить загруженный модуль с a .forFeature:

StoreModule.forFeature ('poolManagement', poolManagementReducer),

У меня были некоторые неопределенные ошибки, поскольку моему селектору не удалось найти элемент poolManagement магазина.

Я решил это, предоставив MockStore ложное состояние:

interface MockState {
    poolManagement: {
      pools: Array<Pool>
    };
  }
let mockStore: MockStore<MockState>;

И установив начальное состояние в соответствии с MockState:

const initialState = { poolManagement: { pools: [] } };

То есть все. Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.

...