В моем угловом приложении у нас есть класс '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();
});
});