开玩笑TypeError:window.URL.createObjectURL不是一个函数

时间:2020-07-23 11:09:12

标签: javascript jestjs

由于在React项目中使用 mapbox-gl 而发生此问题。

我知道有this之类的解决方案,但是由于我是一名初中生,所以我无法完全理解应该怎么做。

我没有任何setupTest.jsjest.stubs.js

创建它们似乎对我的测试套件无济于事。我为此项目使用ftw-hourly ,并添加了 mapbox-gl @ mapbox / mapbox-gl-geocoder 作为依赖项。

有人可以指导我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

这里有一个重要的区别。发生此问题是因为您的测试正在调用Icon,但这不是因为您无法测试使用mapbox-gl的事物。

问题是您需要正确模拟依赖项,以免它们干扰您实际上要测试的行为。我鼓励您阅读有关Jest的支持的Jest文档:https://jestjs.io/docs/en/mock-functions

请简要说明一下您的问题以及我所了解的解决方案:

  1. 您当前正在测试一个在其中调用mapbox-gl的函数
  2. 当您的测试运行者(笑话)使用此功能时,它会调用mapbox-gl
  3. 因为您正在测试一个隔离的函数,所以它可能没有mapbox-gl调用正常运行所必需的所有上下文-因此它引发错误并且您的测试失败

那么您如何解决呢?通过为mapbox-gl创建一些替代逻辑,以便您的测试不会尝试使用真实的东西。

好消息是,这是开发人员在编写测试时遇到的常见问题,大多数测试工具(尤其是mapbox-gl)都支持这种称为模拟/存根的概念,您可以在其中告诉jest“嘿,不要在运行此测试时调用jest,而应使用此小备用功能。”

答案 1 :(得分:0)

如果您使用Create React App来构建应用程序,则可以在此处使用documneted之类的setupTest.js文件:https://create-react-app.dev/docs/running-tests/#initializing-test-environment 我遇到了同样的问题,只是将window.URL.createObjectURL = () => {}添加到setupTests.js。