Как избежать угловых перестроений всех модулей при запуске ng test? - PullRequest
0 голосов
/ 02 июля 2018

Я использую конвейер Дженкинса для создания своего углового 4 приложения. Я использую angular-cli ng build -prod и ng test для запуска тестов. Шаг тестов очень медленный, он занимает больше времени, чем сама сборка. Я обнаружил, что это происходит потому, что на этом этапе все модули перестраиваются, несмотря на то, что сборка только что завершилась. Нет ли способа избежать перестройки на этапе тестирования, поскольку модули уже были собраны?

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Вы можете использовать небольшого помощника, который я написал, функцию precompileForTests() в s-ng-dev-utils. Он скомпилирует все для ваших тестов в начале пакета и заставит Angular повторно использовать результаты для каждого теста. Надеюсь, это поможет!

0 голосов
/ 02 июля 2018

После моего комментария приведен пример тестирования компонента Angular без Angular.

Допустим, у вас есть очень простой маршрутизируемый компонент, например:

export class MyRoutedComponent {
  constructor(private router: Router) {}

  navigateTo(route: string) {
    this.router.navigate(route);
  }
}

Обычный тест состоит в том, чтобы обеспечить зависимость макетом и использовать для этого Тестовый стенд.

Ну, вы не обязаны, и даже руководство по тестированию говорит вам так:

Angular TestBed облегчает такой вид тестирования, как вы увидите в следующих разделах. Но во многих случаях тестирование одного только класса компонента без участия DOM может проверить большую часть поведения компонента более простым и очевидным способом.

Что вы можете сделать, это:

describe('MyRoutedComponent', () => {
  const routerMock = {
    navigate: () => null
  };

  const instance = new MyRoutedComponent(routerMock);

  it('should call router.navigate when navigateTo()', () => {
    spyOn(routerMock, 'navigate');
    instance.navigateTo('foo');
    expect(routerMock.navigate).toHaveBeenCalledWith('foo');
  });
});

Как вы можете видеть, он тестирует компонент так, как это делал бы Testbed, но, поскольку он не полагается на какой-либо HTML, лучше сделать это вместо этого, как это предлагается в руководстве.

...