如何解决 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 i
或yarn add
安装它们,使它们都具有相同的版本。
这应该可行!
就我而言,我错过了 jest-environment-jsdom
包。
【讨论】:
【参考方案2】:对我来说,这是模块导入绑定。对我来说,基本上是模块导出/导入绑定。
基本上如果它是使用module.export
导出的,您应该使用require
导入。如果使用export
或export 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 install
或yarn 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?