【问题标题】:How to put functions in jest globals?如何将函数放入开玩笑的全局变量中?
【发布时间】:2020-03-17 22:16:44
【问题描述】:

我正在设置 jest,但它没有找到 window.I18n.t(),因为它是由 sprockets 定义的(ruby on rails,独立于 webpack)。所以我想嘲笑这种方法。这是错误:

 FAIL  spec/javascript/sanity_test.js
  ● Test suite failed to run

    TypeError: Cannot read property 't' of undefined

      24 |
      25 | export const newOrderPreferenceObject = {
    > 26 |   label: window.I18n.t("some.path.in.localization"), default_value: "",

在 package.json 我可以这样做:

 "jest": {
    "testEnvironment": "jsdom",
    "globals": { 
      "window": {
        "I18n": { "t": {} }
      }
    },

我也将 testEnvironment 从 jsdom 更改为 node

但是,t() 必须是函数,而不是数据结构。那么我该如何在window 中放入一个函数进行开玩笑测试呢?

【问题讨论】:

标签: reactjs webpack jestjs


【解决方案1】:

我不知道您项目的情况,但这是我在项目中设置和模拟全局对象的方式。

我在根src 目录中创建了一个setupTests.js 并在那里模拟它们。

setupTests.js

window.I18n = {
  t: jest.fn(),
}

https://create-react-app.dev/docs/running-tests/#srcsetuptestsjs-1

【讨论】:

  • 这可能适用于大多数情况。就我而言,一个导入的模块依赖于 window.I18n.t() 函数,我无法在导入之前执行存根。所以我的解决方案是不在那个模块中使用window,所以我并没有真正解决这个问题。
猜你喜欢
  • 2020-07-21
  • 2017-03-06
  • 1970-01-01
  • 2016-05-02
  • 2022-12-24
  • 2021-09-17
  • 2020-04-05
  • 2023-02-03
  • 1970-01-01
相关资源
最近更新 更多