开玩笑-ReferenceError:未为简单的测试文件定义define

时间:2018-10-30 00:20:57

标签: javascript reactjs jestjs

我正在尝试使用jest来测试我的项目,但是即使运行测试文件非常简单,运行npm run test时,我仍会得到ReferenceError: define is not defined

test("Adding 1 + 1 equals 2", () => {
  expect(1 + 1).toBe(2);
});

这导致我认为我的设置配置错误,但是我认为我在配置中没有做任何可能导致此事情的事情(我认为)。

当我在测试用例中不直接使用define时,为什么不告诉我define感到困惑。任何指针,我将不胜感激!

谢谢!

编辑:这是我的package.json

"jest": {
  "collectCoverageFrom": [
    "src/**/*.{js,jsx,mjs}"
  ],
  "testMatch": [
    "**/__tests__/**/*.js?(x)",
    "**/?(*.)+(spec|test).js?(x)"
  ],
  "testEnvironment": "node",
  "testURL": "http://localhost",
  "transform": {
    "^.+\\.(js|jsx|mjs)$": "./node_modules/babel-jest",
    "^.+\\.css$": "./config/jest/cssTransform.js",
    "^(?!.*\\.(js|jsx|mjs|css|json)$)": "./config/jest/fileTransform.js"
  },
  "transformIgnorePatterns": [
    "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
  ],
  "moduleNameMapper": {
    "^react-native$": "react-native-web"
  },
  "moduleFileExtensions": [
    "web.js",
    "js",
    "json",
    "web.jsx",
    "jsx",
    "node",
    "mjs"
  ]
}

编辑2:我发现即使测试文件中什么也没有,我仍然遇到相同的ReferenceError: define is not defined错误

2 个答案:

答案 0 :(得分:0)

问题出在我的.babelrc中。更改为:

{
  "env": {
    "test": {
      "plugins": []
    },
    "development": {
      "plugins": [
        "transform-es2015-modules-amd"
      ]
    }
  },
  "presets": [
    "react",
    "es2015",
    "stage-2"
  ],
  "sourceMaps": false,
  "ignore": [
    "build",
    "node_modules"
  ]
}

错误消失了:-)

答案 1 :(得分:0)

那是因为我们有@babel/plugin-transform-modules-amd,以便在过程测试任务中,代码将转换为define() AMD格式,这就是错误define的出处。为玩笑测试指定babel配置可以解决此问题。

// babel.config.js
module.exports = api => {
  const commonConfig = {/* preset configs or something */};
  if( !api.env("test") ){
    commonConfigs.plugins.push("@babel/plugin-transform-modules-amd");
  }

  return commonConfig;
}

Jest API Reference / Making your Babel config jest-aware


关于转换后的代码 该命令将向您显示测试代码的缓存目录,

npx jest --showConfig | grep cacheDirectory
# /private/var/folders/dc/7gkfb6ns0c79ll9gv2y3m6_w0010gn/T/jest_dx

打开该文件夹,您可能会在jest_dx/jest-transform-cache-{HASH}/{QueueNumber}中看到一些文件,该文件就在其中。