Угловой тест работает при изолированном запуске, но не работает с другими тестами.

Я столкнулся с проблемой, из-за которой тест постоянно терпит неудачу, когда он запускается со всеми другими тестами в моем приложении. Возвращаемая ошибка

Uncaught TypeError: вы указали «неопределенное» там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable. брошенный

Ниже приведены два класса и тестовый файл в вопросах.

Класс уведомлений

export class Notification {
  message: string;
  category: string;
  clearAll: boolean = false;

  constructor(message: string, category?: string, clear?: boolean) {
    this.message = message;
    if (category) {
      this.category = category;
    }
    if (clear) {
      this.clearAll = clear;
    }
  }
}

Класс службы уведомлений

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Notification } from '../shared/notification';;


@Injectable({
  providedIn: 'root'
})
export class NotificationsService {
  notificationSubject: Subject<Notification>;
  notification$: Observable<any>;


  constructor() {
    this.notificationSubject = new Subject<Notification>();
    this.notification$ = this.notificationSubject.asObservable();
  }

  getNotificationObservable(): Observable<Notification> {
    return this.notification$;
  }

  /**
   * Method allowing a notification to be added so that subsribers can deal with is     according.
   * @param {Notification}notification
   */
  addNotifications(notification: Notification): void {
    this.notificationSubject.next(notification);
  }
}

уведомлениеService.spec.ts

import { NotificationsService } from './notifications.service';

describe('NotificationService', () => {
  let service: NotificationsService;

  beforeEach(() => { service = new NotificationsService(); });

  it('to be created', () => {
    expect(1 === 1).toBeTruthy();
  });

});

если я запускаю этот тест как сфокусированный, он проходит. то есть

fit('to be created', () => {
    expect(1 === 1).toBeTruthy();
  });

Из поисков, которые я сделал, кажется, есть предложения, которые либо:

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

Я подозреваю, что дело может быть во второй пуле, но я не могу определить проблему.


person Edward    schedule 15.03.2019    source источник
comment
Почему вы ожидаете, что проблема будет в классе уведомлений? Ваша ошибка связана с отсутствующим потоком, а уведомление не содержит потоков.   -  person Jesse de Wit    schedule 16.03.2019


Ответы (1)


Я была такая же проблема. Проблема не в неудачном тесте, а в предыдущем тесте. В итоге я удалил предыдущий тест и решил эту проблему.

person Chunsheng Hu    schedule 15.03.2019
comment
Это не отвечает на вопрос. Это утверждение на самом деле является частью вопроса. - person Jesse de Wit; 16.03.2019
comment
Хотел прокомментировать, но не хватило репутации - person Chunsheng Hu; 17.03.2019
comment
Спасибо @ChunshengHu, что указали мне правильное направление. Очевидно, у меня были асинхронные тесты, запущенные до тестов уведомлений, которые были асинхронными, но не закрывались должным образом. Как только я добавил соответствующие методы verify() и 'done()', все заработало. - person Edward; 19.03.2019