Обнаружить ошибки консоли как ошибку и сделать тест непройденным

Можно ли обнаружить ошибки консоли в модульных тестах с помощью karma runner и пометить модульный тест как не пройденный. В моем текущем проекте у меня есть сотни тестов, и проект не находится в чистом состоянии. Когда я запускаю модульные тесты с помощью ng test, я получаю сотни или даже тысячи консольных сообщений, например

ERROR: ''mat-icon' is not a known element:
1. If 'mat-icon' is an Angular component, then verify that it is part of this module.
2. If 'mat-icon' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.'

но все тестовые случаи проходят успешно. Нет подсказки, какие тестовые случаи вызывают эти проблемы. Я пытался вручную проходить тесты, заменяя it( на fit(, проверять каждый тест и исправлять его, но это занимает слишком много времени. Я бы хотел, чтобы каждый тест, содержащий ошибку в журнале консоли, не прошел, как это можно сделать в тестах E2E с помощью

afterEach(async () => {
  // Assert that there are no errors emitted from the browser
  const logs = await browser.manage().logs().get(logging.Type.BROWSER);
  expect(logs).not.toContain(jasmine.objectContaining({
    level: logging.Level.SEVERE,
  } as logging.Entry));
});

так что конвейер CD/CI дает сбой, и разработчику приходится исправлять тесты.

Конфигурация модульных тестов используется по умолчанию. Это karma runner с жасмином и Chrome без головы.

Я искал конфигурацию кармы, но не смог ее найти. Возможно ли это даже с помощью модульных тестов? Если можно, то можно ли настроить это в одном месте и не трогать все сотни тестовых файлов?

Чтобы воспроизвести мою проблему, создайте новый проект Angular с ng new sandbox. Измените app.component.ts на

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: '<mat-icon></mat-icon>'
})
export class AppComponent  {
}

Измените app.component.spec.ts на:

import { TestBed } from '@angular/core/testing';
import { AppComponent } from './app.component';

describe('AppComponent', () => {
  beforeEach(async () => {
    await TestBed.configureTestingModule({
      declarations: [
        AppComponent
      ],
    }).compileComponents();
  });

  it('should create the app', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.componentInstance;
    expect(app).toBeTruthy();
  });
});

Удалите app.components.html и app.component.css. Выполнить ng test.

Даже если приложение не работает из-за того, что не установлен Material, тест не будет провален. Он проходит, но печатает журналы ошибок. Я получаю вывод:

> ng test

⠋ Generating browser application bundles...21 04 2021 18:18:06.826:WARN [karma]: No captured browser, open http://localhost:9876/
21 04 2021 18:18:06.830:INFO [karma-server]: Karma v6.1.2 server started at http://localhost:9876/
21 04 2021 18:18:06.831:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
⠙ Generating browser application bundles (phase: building)...21 04 2021 18:18:06.835:INFO [launcher]: Starting browser Chrome
✔ Browser application bundle generation complete.
21 04 2021 18:18:09.656:WARN [karma]: No captured browser, open http://localhost:9876/
21 04 2021 18:18:09.696:INFO [Chrome 89.0.4389.114 (Linux x86_64)]: Connected on socket w7tUMYWxN3pJ5tdBAAAB with id 77883839
ERROR: 'NG0304: 'mat-icon' is not a known element:
1. If 'mat-icon' is an Angular component, then verify that it is part of this module.
2. If 'mat-icon' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.'
Chrome 89.0.4389.114 (Linux x86_64): Executed 0 of 1 SUCCESS (0 secs / 0 secs)
ERROR: 'NG0304: 'mat-icon' is not a known element:
1. If 'mat-icon' is an Angular component, then verify that it is part of this module.
Chrome 89.0.4389.114 (Linux x86_64): Executed 1 of 1 SUCCESS (0.072 secs / 0.023 secs)
TOTAL: 1 SUCCESS

Я бы хотел, чтобы этот тест провалился.


person Community    schedule 21.04.2021    source источник


Ответы (1)


Существует открытая проблема, связанная с вашим вопросом: https://github.com/angular/angular-cli/issues/18177

person Syperia    schedule 21.04.2021
comment
Спасибо за ссылку, но я не уверен, что эта проблема связана с моим вопросом. В основном это описывает разницу между транспиляцией в сборке/сервере и тесте. Но моя проблема - ошибки времени выполнения. У меня нет ошибок транспиляции. В противном случае мою проблему можно было бы решить с помощью шага сборки в тестовом конвейере. - person ; 22.04.2021