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

Posted

技术标签:

【中文标题】如何解决 TypeError: environment.teardown is not a function【英文标题】:How to solve TypeError: environment.teardown is not a function 【发布时间】:2018-11-14 17:03:53 【问题描述】:

我无法测试使用 create-react-app 创建的应用程序。

所有指南都说测试默认工作,但是当我尝试“yarn test”时,它需要安装'jest-cli',安装后出现错误:

TypeError: environment.teardown 不是函数

【问题讨论】:

您不需要自己安装 jest-cli,它应该是开箱即用的。执行此操作:删除 package-lock.json、yarn.lock、node_modules,从 package.json 中的依赖项中删除 jest,然后执行 npm install 和 yarn install。 @MstrQKN 哦,谢谢你,我搞了 2 天,非常感谢你 我将添加我的评论作为答案,请确认答案以便问题关闭:) 【参考方案1】:

如果您没有在项目中使用create-react-app

只需从package.json 中删除jest, jest-cli, jest-environment-jsdom。 删除文件夹node-modules、文件package-lock.json和文件yarn.lock。 使用npm --save iyarn add 安装它们,使它们都具有相同的版本。

这应该可行!

就我而言,我错过了 jest-environment-jsdom 包。

【讨论】:

【参考方案2】:

对我来说,这是模块导入绑定。对我来说,基本上是模块导出/导入绑定。

基本上如果它是使用module.export 导出的,您应该使用require 导入。如果使用exportexport default 导出,则应使用import 导入。

这里不允许混合。

【讨论】:

module.export?不是module.exports【参考方案3】:

在这个问题上敲了一个晚上之后,我想我终于解决了。首先,让我描述一下问题:

我也得到了:

TypeError: environment.teardown 不是函数

因为我试图将 Jest 升级到最新版本。使用 Create-React-App 启动应用程序时,它会安装不包含所有功能的早期版本的 Jest。我对使用 inlineSnapshots 功能很感兴趣,它允许您针对测试文件中的 html 标记断言呈现的组件。

有一些内容未包含在 Create-React-App 或 Jest 的文档中,您应该注意这些内容。如果您想使用更新的 Jest 功能,例如 inlineSnapshots,则需要执行以下操作:

yarn 添加了新版本的 Jest 和 jest-environment-jsdom yarn add prettier --dev(这是为了方便重写回源文件。) 在每个测试脚本的最顶部添加一个 Jest env docblock。

一个 docblock 是一个带有 pragma 标记“@”的 javascript 块注释。为了设置 Jest 环境,您可以将其添加到每个测试文件的顶部:

/**
 * @jest-environment jsdom
 */

这指示 jest 在 jsdom 环境中运行测试,它应该与 package.json 文件的测试脚本部分中传递的内容相匹配。我的看起来像这样(忽略带有 react-app-rewired 的部分):

   "scripts": 
      "start": "yarn run flow && react-app-rewired start",
      "build": "yarn run flow && react-app-rewired build",
      "test": "react-scripts test --env=jsdom"
   

在完成所有这些之后,我终于可以让 inlineSnapshots 工作了。

【讨论】:

【参考方案4】:

将新版本的“jest-environment-jsdom”添加到文件“package.json”中。

【讨论】:

您好,除非您有“具体细节”的答案,否则尽量避免在答案中发表评论。请使用下面的评论框,一旦您有足够的声誉,您就可以对任何帖子发表评论。 :) 这启发了我并发挥了作用,npm i -D jest-environment-jsdom@24【参考方案5】:

在我的情况下,它会引发此错误,因为我使用 create-react-app 创建了我的 React 项目并安装了 jest。在某些方面它会发生冲突。

解决它通过从我的项目中删除jest 并使用create-react-app 测试脚本。

【讨论】:

【参考方案6】:

您不需要自己安装 jest-cli。它应该是开箱即用的。

尝试以下方法:

    删除 package-lock.json、yarn.lock 和 node_modules 从 package.json 中的依赖项中移除 jest 然后执行npm installyarn install

【讨论】:

那么如何测试单个文件呢? npm 测试? 不太确定Weijing,但我想你的答案应该在这里:github.com/facebook/create-react-app/blob/master/packages/… @WeijingJayLin ,根据模式测试文件以匹配文件。如果要测试单个文件,则应为其文件名指定特定模式。 yarn run test /specificfolder/otherspecific/file.spec.js 如果该模式只匹配一个文件。然后你将只测试一个文件。你想要的那个! 如果您使用了create-react-app,请确保"test": "react-scripts test --env=jsdom" 是您的测试脚本。

以上是关于如何解决 TypeError: environment.teardown is not a function的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: DisplayMarketingMessage() 没有参数如何解决它

TypeError: Cannot read property 'scrollIntoView' of null 如何解决?

如何解决“TypeError:process.getuid 不是函数”

将 Bot 部署到 Heroku 时如何解决 TypeError?

如何解决:TypeError:null 不是对象(评估“AgoraRtcChannelModule.prefix”)?

如何解决 TypeError:'numpy.ndarray' 对象在 Python 上不可调用