Тестирование Angular + Redux Jasmine "Невозможно прочитать свойство 'dispatch' of undefined", случайно выбрасываемое в прогоны

У меня есть интеграционный тест, который зависит от 2 сервисов, которые я предоставляю на тестовый стенд с заглушками.

Когда я тестирую функцию updateCategory() в блоке подписки этой категории у меня есть функция ngRedux.dispatch({тип: что-то})

Ошибка: TypeError: Cannot read property 'dispatch' of undefined случайным образом выбрасывается, даже если служба отключена и функция предоставлена. По какой-то странной причине он считает, что это собственность сервиса.

Эта ошибка генерируется без внесения каких-либо изменений в тест, просто обновляя страницу кармы:

  • При случайном тестировании каждый раз.
  • Иногда все тесты проходят с ошибкой только в консоли.
  • Иногда перестает пробовать другие тесты после выдачи ошибки.
  • Иногда выдает ошибку при прохождении всех тестов.

Это настолько непредсказуемо, что для меня это вообще не имеет никакого смысла.

Конфигурация TestBed:

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        MatSnackBarModule,
        ReactiveFormsModule,
        FormsModule,
        MatInputModule,
        MatExpansionModule,
        BrowserAnimationsModule,
        NgReduxTestingModule
      ],
      declarations: [AdminCategoriesComponent],
      providers: [
        { provide: AdminService, useClass: AdminStub },
        { provide: NgRedux, useclass: MockNgRedux }
      ],
      schemas: [NO_ERRORS_SCHEMA]
    })
      .compileComponents()
      .then(() => {
        MockNgRedux.reset();
        fixture = TestBed.createComponent(AdminCategoriesComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
      });
  }));

Тестовая конфигурация:

 it('should update category', () => {

    component.categoryID = 1;
    component.categoryTitle = 'Test Category Title';
    component.categoryDescription = 'Test Category Description';
    component.ngOnInit();

    fixture.detectChanges();

    component.categoryForm.value.categoryTitle = 'New Category Title';
    component.categoryForm.value.categoryDescription =
      'New Category Description';

    component.updateCategory();

    fixture.detectChanges();
    expect(component.localLoading).toBeFalsy();
  });

Без теста выше - ошибка не выдается. И без функции диспетчеризации в этом блоке подписки ошибка также не выдается.

0 ответов

Модуль angular-redux устарел и просто мусор, это становится намного очевиднее, когда вы пытаетесь запустить с ним какие-либо тесты. Через год после перехода на @ ngrx/store и правильного изучения работы с наблюдаемыми объектами решение состоит в том, чтобы использовать @ ngrx/store или fork angular-redux и самостоятельно исправить ошибки.

Другие вопросы по тегам