projects.map 不是 jest-cli 的功能

Posted

技术标签:

【中文标题】projects.map 不是 jest-cli 的功能【英文标题】:projects.map is not a function for jest-cli 【发布时间】:2017-10-05 20:42:27 【问题描述】:

我正在编写一个反应应用程序并开玩笑地对其进行测试。但是,每当我从终端运行 jest 命令时,我都会保留此错误。

TypeError: projects.map is not a function
    at Object.<anonymous> (/Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:172:28)
    at next (native)
    at step (/Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:18:30)
    at /Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:34:14
    at Object.<anonymous> (/Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:15:12)
    at Object.module.exports [as runCLI] (/Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:2 03:17)
    at Object.run (/Users/DavidHu/.nvm/versions/node/v6.2.1/lib/node_modules/jest-cli/build/cli/index.js:42:17)
    at Object.<anonymous> (/Users/DavidHu/.nvm/versions/node/v6.2.1/lib/node_modules/jest-cli/bin/jest.js:16:25)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)

我进入node_modules查看导致错误的代码行,projects是项目当前路径的字符串。

这是我在package.json中的玩笑配置

  "jest": 
    "transform": 
      ".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
    ,
    "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js"
    ]
  

有没有人遇到过这个错误并知道如何解决?

【问题讨论】:

这里我不知道确切的解决方案,但是 .map 是数组原型的一部分。 你能展示你的笑话配置吗?这是所有测试都失败还是只有一个失败? @Nick,我用开玩笑的配置更新了这个问题。这对所有测试都失败了。即使我删除了所有测试,这个错误仍然会出现。 【参考方案1】:

刚刚遇到了同样的问题。如果您仔细查看堆栈跟踪,您会注意到您运行了两种不同的 Jest 设置:

全局安装的笑话:

...(/Users/DavidHu/.nvm/versions/node/v6.2.1/lib/node_modules/jest-cli/bin/jest.js:16:25)

项目中的笑话:

...(/Users/DavidHu/Desktop/coding/projects/swapnow/node_modules/jest-cli/build/cli/runCLI.js:172:28)

它们可能有不同(且不兼容)的版本。 如果您从项目(或全局 node_modules)中删除 jest,应该可以解决问题。

【讨论】:

从项目中删除 Jest 绝对应该是最后的选择。当您知道要在您的项目上运行/工作的 Jest 版本时,任何进入您项目的人,甚至 6 个月后的您自己都会感谢您。【参考方案2】:

如果您在项目中更新 jest,但仅使用命令行(而不是 node_modules)使用 jest 运行它,就会发生这种情况。

要解决此问题,您需要更新全局笑话:

npm install -g jest

【讨论】:

【参考方案3】:

我有同样的问题。我将字符串而不是数组传递给“项目”参数。

在 [] 中包装字符串 'projectPath' 为我修复了它(位于 Gulp 任务中):

var jestCLI = require('jest-cli');
...
jestCLI.runCLI('onlyChanged': true, [projectPath], callback);

【讨论】:

我的问题与我传入 dirname 而不是 [dirname] 的情况类似。另外,我目前在 v22 上,所以上面的答案可能适用于以前的版本。重新安装并没有解决我的问题。【参考方案4】:

我在 jest-cli 的本地和项目安装中遇到了同样的问题。我删除了 jest-cli 的项目安装并解决了问题。

【讨论】:

以上是关于projects.map 不是 jest-cli 的功能的主要内容,如果未能解决你的问题,请参考以下文章

开玩笑错误:'jest' 不是内部或外部命令、可运行程序或批处理文件

React 不会在地图函数中呈现

Jest 测试在 tsx 语法上失败

如何解决 TypeError: environment.teardown is not a function

我怎样才能让这条线开玩笑? => jasmine.clock().install();

测试第二篇文章