Почему мои угловые тесты дают противоречивые результаты? - PullRequest
0 голосов
/ 14 февраля 2019

В моем угловом приложении у нас есть класс 'LayoutContainer', который просто показывает заголовок нашего веб-сайта, а затем навигационную панель со статическими ссылками.

Мне нужно было сделать ссылки динамическими в зависимости от того, ктозарегистрированный пользователь - если он администратор, я хочу показать новую ссылку.Я импортировал редукторы из модуля «account».

Теперь я вижу несоответствие модульным тестам, и некоторые старые тесты ломаются, когда я выполняю случайный порядок выполнения тестов.В других случаях все 68 тестов проходят.

Вот ошибка, которая иногда выскакивает для определенных компонентов, которые «должны создать» классы:

Uncaught TypeError: Cannot read property 'authentication' of undefined
    at :9876/_karma_webpack_/webpack:/src/app/account/reducers/index.ts:42
    at :9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:528
    at memoized (:9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:484)
    at defaultStateFn (:9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:502)
    at :9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:531
    at memoized (:9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:484)
    at :9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:501
    at Array.map (<anonymous>)
    at defaultStateFn (:9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:501)
    at :9876/_karma_webpack_/webpack:/node_modules/@ngrx/store/fesm5/store.js:531
    at 

Строка 42 account / redurs / index.tsвот что:

// Reducers
import * as fromRoot from '../../reducers';
import * as fromAuthentication from './authentication.reducer';
import * as fromFacility from './club.reducer';
import * as fromRegistration from './registration.reducer';
import * as fromSubscription from './subscription.reducer';
import * as fromUserSubscription from './user-subscription.reducer';

import { RegistrationErrorTypes } from '../actions/registration.actions';
import { LEAVE_SELECTOR } from '../../../../node_modules/@angular/animations/browser/src/util';

export interface AccountState {
  authentication: fromAuthentication.State;
  facility: fromFacility.State;
  registration: fromRegistration.State;
  subscription: fromSubscription.State;
  userSubscription: fromUserSubscription.State;
}

export const 
selectAuthStatusState = createSelector(
  selectAccountState,
  (state: AccountState) => state.authentication  /// LINE 42 that is 'undefined'
);

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

РЕДАКТИРОВАТЬ - Пример теста, который не проходит

// Angular Core
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

// Angular Material
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';

// ngrx
import { StoreModule, combineReducers } from '@ngrx/store';

// Reducers
import * as fromAccount from '../../../account/reducers';

// Component
import { CancelSubscriptionDialogComponent } from './cancel-subscription-dialog.component';

describe('CancelSubscriptionComponent', () => {
  let component: CancelSubscriptionDialogComponent;
  let fixture: ComponentFixture<CancelSubscriptionDialogComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        StoreModule.forRoot({
          account: combineReducers(fromAccount.reducers)
        })
      ],
      providers: [
        { provide: MatDialogRef, useValue: {} },
        {
          provide: MAT_DIALOG_DATA,
          useValue: {}
        }
      ],
      declarations: [CancelSubscriptionDialogComponent]
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(CancelSubscriptionDialogComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...