Угловой юнит-тест ведет себя иначе, если выполняется с другими тестами

Примечание. Соответствующие фрагменты кода приведены ниже.
Я запускаю модульные тесты, используя Angular версии 5.2.11, с Jasmine версии 2.6.4 и Karma версии 1.7.1. Когда я запускаю модульные тесты только для рассматриваемого компонента (игнорируя остальные тесты в приложении), все тесты завершаются успешно. Тем не менее, когда я запускаю его с тестами для всех других компонентов, один тест не пройден, и я получаю сообщение об ошибке "component.objList is undefined". Хотя изначально я был озадачен этой ошибкой, я поместил операторы записи консоли по всему тесту и функции, которую я пытаюсь протестировать, в компоненте (component.getObj()) и понял, что когда я запускаю только модульные тесты для этого компонента, он вызывает функцию (что ожидается, поскольку я явно вызываю ее, как показано в приведенном ниже коде), и продолжает работу, как ожидалось. Однако, когда я запускаю все модульные тесты вместе, он не входит в component.getObj () вообще (в консоль ничего не записывается). Именно такое поведение я не могу понять. Важным моментом здесь является то, что класс сервиса, вызываемый в component.getObj (), проверяется другим классом в тестах (как показано в коде), но уместным моментом (на мой взгляд) является тот самый component.getObj () не вызывается. Когда выполняются только тесты компонентов, фиктивный объект возвращается, как и ожидалось. Если я установлю шпиона в моем тесте, я смогу вызвать поддельный метод вместо component.getObj() (подтверждено ведением журнала), даже когда я запускаю все тесты. Буду признателен за любую помощь, как исправить или уточнить, почему это происходит!

Код:
component.spec.ts:

it('should setup status tooltip', () => {
fixture.detectChanges();
component.field = {
  id: -1,
  map: {
    objId: 22,
    objName: "Running",
    // other properties
  },
  someObj: []
};

component.getObj(); //this is the line in question
fixture.detectChanges();
//expectations are here
});

component.ts

getObj() {
    this.myService.getObjects().subscribe(
      res => {
        this.ObjList = res;
        //do something
      },
      err => {
        let errorMsg = "Error!";
        //do something
      });
  }

MockMyService

export class MockMyService {
    // other functions
    getObjects() {
        return Observable.of(objList); //objList is defined earlier
    }
}

0 ответов

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