Проблема с тайм-аутом жасмина - PullRequest
2 голосов
/ 08 октября 2019

При случайных сбоях модульного теста с этим режимом сбоя

Ошибка: время ожидания - асинхронный обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL.

Некоторые изэти неудачные тесты даже не имеют асинхронного тестирования!

Интересно, верен этот фрагмент кода или нет;это шаблон, который мы используем во всех тестах в Angular

beforeEach(async(() => {
    TestBed.configureTestingModule({ . // Should this be **return TestBed.configureTestingModule**
      imports: [
        ...CommonTestModules
      ],
      declarations: [FooComponent]
    })
    .compileComponents();
  }));

Должно ли обещание compileComponents быть возвращено из обратного вызова? Я где-то читал, что обещания ожидаются асинхронной оболочкой, которая в конечном итоге вызывает done (), когда обещания разрешены. Но здесь этот шаблон выглядит так, как будто он не возвращает обещание, и мы нигде не вызываем ключевое слово «await». Этот код выглядит неправильно без оператора return?

1 Ответ

0 голосов
/ 09 октября 2019

Можно не возвращать это обещание, функция async отвечает за ожидание всех обещаний, созданных внутри beforeEach. Вы можете видеть этот шаблон в документах Angular Testing :

beforeEach(async(() => {
  TestBed.configureTestingModule({
    declarations: [ BannerComponent ],
  })
  .compileComponents();  // compile template and css
}));

Возможно, ваша IDE будет жаловаться, как это делает WebStorm, потому что она не знает семантики Angular asyncфункция (обратите внимание, это не то же самое ключевое слово async из JavaScript, это функция, объявленная в Angular

Об исходной ошибке, попробуйте выделить неудачный тест или добавьте пример одного из них. тесты, которые иногда не показывают, видим ли мы что-то странное.

...