Jest тест успешно завершен с ошибкой, выведенной на консоль - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь использовать jest с Angular-проектом, созданным @nrwl/nx.Я следовал этой статье, чтобы преобразовать мое приложение из karma в jest.

Проблема, которую я получаю, заключается в том, что даже если мои тесты проходят, по какой-то причинев консоли отображается следующая ошибка:

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
Error: Error: connect ECONNREFUSED 127.0.0.1:80
    at Object.dispatchError (\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:65:19)
    at Request.client.on.err (\node_modules\jsdom\lib\jsdom\living\xmlhttprequest.js:676:20)
    at Request.emit (events.js:187:15)
    at Request.onRequestError (\node_modules\request\request.js:881:8)
    at ClientRequest.emit (events.js:182:13)
    at Socket.socketErrorListener (_http_client.js:391:9)
    at Socket.emit (events.js:182:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19) undefined

У меня есть только один тест:

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

import { CommonUtilsModule } from '@lib/common-utils';

describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule, CommonUtilsModule],
      declarations: [AppComponent]
    }).compileComponents();
  }));
  it('should create the app', async(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    expect(app).toBeTruthy();
  }));
});

По какой-то причине, если я выну следующую строку, ошибка консоли неshow:

const fixture = TestBed.createComponent(AppComponent);

Я искал ошибку несколько часов, но не могу понять, что ее вызвало.Я не выполняю никаких http-запросов в своем тесте или компоненте, поэтому не знаю, почему он говорит ECONNREFUSED.

Кто-нибудь имел эту ошибку раньше?

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Как указано в angular.io о compileComponents:

Скомпилируйте модуль тестирования асинхронно после завершения его настройки.Этот метод необходимо вызывать, если какой-либо из компонентов модуля тестирования имеет templateUrl или styleUrls, поскольку выборка шаблона и файлов стилей компонента обязательно является асинхронной.См. Выше.

После вызова compileComponents конфигурация TestBed останавливается на время текущей спецификации.

Так что Jasmine & Angular изначально используют fetch для получения HTML, и compileComponents должен быть вызван, чтобы сделать эти файлы HTML доступными.

Я не уверен, почему это необходимо, но JSDOM явно не в состоянии справиться с этим.

Я рекомендую использовать пакет jest-preset-angular , который решает эту проблему с помощью пользовательских процессоров.

Убедитесь, что вы следуете инструкциям по настройке в их файле README.md, так как в данный момент настройка довольно шаткаянаписания этого комментария, и не слишком меняйте конфигурацию jest.ts-jest проходит перезапись, и пресет не догнал до последней версии.Я настоятельно рекомендую вам установить только jest и пресет через npm, чтобы в вашей рабочей области не было несовместимой версии ts-jest.Это очень важно, так как ts-jest не следует семантическому версионированию.

Еще одна вещь, на которую следует обратить внимание, это то, что точки останова будут работать только в том случае, если вы запускаете jest с --runInBand / -i.Если вы запускаете --watch, работа в полосе не будет работать, а точки останова будут срабатывать только в том случае, если вы протестируете только один файл (чего можно достичь с помощью шаблона регулярных выражений имени файла).Несколько файлов будут проверены в нескольких процессах, которые, я полагаю, не работают в режиме проверки, и vscode / ваш любимый отладчик не может подключиться.

0 голосов
/ 26 сентября 2018

Это сообщение часто встречается, когда вы пытаетесь сделать запрос к сервису localhost, который недоступен.

Давайте посмотрим, что я запускаю скрипт, который использует мой сервис node.js, который выполняется под localhost:80.Если мой экземпляр узла не запущен, я получу сообщение, подобное вашему.

Я считаю, что происходит то, что вы настроили порт для проверки на 80, который обычно более часто используется по умолчанию как 8080.

...