Angular тест ngrx с ошибкой jest throw `console.error node_modules / jsdom / lib / jsdom / virtual-console.js: 29`

Я провожу тестирование своего ngrx/store с jestjs. Получил результат прохождения тестирования. даже если появляется ошибка вроде:

console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
    Error: Cross origin http://localhost forbidden
        at dispatchError (C:\722333\USD\Project\AOS.UI\NG-USD\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:60:19)
        at Object.validCORSHeaders (C:\722333\USD\Project\AOS.UI\NG-USD\node_modules\jsdom\lib\jsdom\living\xhr-utils.js:72:5)
        at receiveResponse (C:\722333\USD\Project\AOS.UI\NG-USD\node_modules\jsdom\lib\jsdom\living\xmlhttprequest.js:842:21)
        at Request.<anonymous> (C:\722333\USD\Project\AOS.UI\NG-USD\node_modules\jsdom\lib\jsdom\living\xmlhttprequest.js:677:38)
        at Request.emit (events.js:203:13)
        at Request.onRequestResponse (C:\722333\USD\Project\AOS.UI\NG-USD\node_modules\request\request.js:1066:10)
        at ClientRequest.emit (events.js:203:13)
        at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:575:27)
        at HTTPParser.parserOnHeadersComplete (_http_common.js:116:17)
        at TLSSocket.socketOnData (_http_client.js:449:22) undefined

Кто-нибудь поможет мне разобраться в этой проблеме? и как это решить?

Заранее спасибо.

ОБНОВЛЕНИЕ: согласно предложению Люкции, я исправил проблему с корсом. но появляется сообщение об ошибке:

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

      at mapper (node_modules/jest-jasmine2/build/queueRunner.js:25:45)

нужно добавить обходной путь для этого?


person 3gwebtrain    schedule 02.11.2019    source источник
comment
Похоже, у вас асинхронный тест. Вам нужно либо использовать fakeAsync с tick, чтобы пройти время, либо предоставить done: DoneFn в качестве обратного вызова в it и вызвать done(), когда это будет сделано, или done.fail(), если это не удастся   -  person Sergey    schedule 02.11.2019
comment
@Sergey - как вызвать функцию done? любая помощь? Вот мой тестовый код: jsfiddle.net/L2yjw5kp   -  person 3gwebtrain    schedule 02.11.2019
comment
Вы уверены, что отлаживаете правильный тест? Похоже, что ошибка не связана с показанным вами тестом, потому что такие ошибки обычно появляются в тестах, которые имеют .subscribe или какие-либо асинхронные функции (setTimeout, обещание.then () и т. Д.).   -  person Sergey    schedule 02.11.2019


Ответы (2)


Похоже, вы используете магазин и эффекты для теста. Я предполагаю, что в результате возникнет HTTP-запрос, вызывающий эту проблему.

Вот почему я бы посоветовал издеваться над сервисом:

{
  provide: GoogleBooksService,
  useValue: { searchBooks: jest.fn() },
}

См. Пример приложения NgRx для примера.

person timdeschryver    schedule 02.11.2019

Похоже, ваш браузер блокирует чтение из разных источников (CORB). Взгляните на это статья. Надеюсь, это поможет!

person Luctia    schedule 02.11.2019
comment
согласен, я исправил проблему cors, появилось еще одно сообщение об ошибке .. вы можете предложить какое-либо решение для этого? - person 3gwebtrain; 02.11.2019