【问题标题】:Angular ngrx test with jest throw error ` console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29`带有开玩笑的 Angular ngrx 测试抛出错误`console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29`
【发布时间】:2020-02-28 12:31:37
【问题描述】:

我用jestjs 为我的ngrx/store 进行测试。我得到了测试通过的结果。即使收到如下错误:

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

有人帮助我理解上述问题吗?以及如何解决?

提前致谢。

更新: 根据 Luctia 的建议,我修复了 cors 问题。但收到如下错误:

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)

需要为此添加任何解决方法吗?

【问题讨论】:

  • 您似乎有一个异步测试。您需要使用fakeAsynctick 来“通过”时间,或者在it 中提供done: DoneFn 作为回调,并在完成时调用done(),如果失败则调用done.fail()
  • @Sergey - 如何调用完成功能?有什么帮助吗?这是我的测试代码:jsfiddle.net/L2yjw5kp
  • 您确定您正在调试正确的测试吗?似乎错误与您展示的测试无关,因为此类错误通常出现在具有 .subscribe 或任何异步功能(setTimeout、promise.then() 等)的测试中。

标签: angular jestjs angular-test ngrx-store-8.0


【解决方案1】:

似乎您正在使用商店和效果进行测试。我将假设效果会发出一个 http 请求,从而导致此问题。

这就是我鼓励模拟服务的原因:

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

有关示例,请参阅 NgRx Example App

【讨论】:

    【解决方案2】:

    您的浏览器似乎阻止了跨域读取 (CORB)。看看this 文章。希望对您有所帮助!

    【讨论】:

    • 同意,我修复了 cors 问题,又遇到了一个错误。你能建议任何解决方案吗?
    猜你喜欢
    • 2017-11-19
    • 2018-09-27
    • 1970-01-01
    • 2022-08-15
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2021-03-12
    相关资源
    最近更新 更多