如何解决TypeError:environment.teardown不是一个函数?

问题描述 投票:6回答:5

我无法测试使用create-react-app创建的应用程序,所有指南都说默认情况下测试工作正常,但是当我尝试“纱线测试”时,它需要安装'jest-cli'并在安装后出现错误“TypeError:environment。拆解不是一个功能“。

javascript reactjs unit-testing testing jestjs
5个回答
18
投票

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

请尝试以下方法:

  1. 删除package-lock.json,yarn.lock和node_modules
  2. 从package.json中的依赖项中删除jest
  3. 然后做npm installyarn install

3
投票

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


1
投票

在我的情况下,它抛出此错误,因为我使用create-react-app创建我的反应项目并安装jest。它以某种方式发生冲突。

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


1
投票

经过一个关于这个问题的傍晚,我想我终于解决了这个问题。首先,让我来描述一下这个问题:

我也得到了:

TypeError: environment.teardown is not a function

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

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

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

docblock是带有编译标记“@”的JS块注释。要设置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正常工作。


0
投票

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

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

这里不允许混合。


0
投票

如果您还没有将create-react-app用于该项目:

  • 只需从jest, jest-cli, jest-environment-jsdom删除package.json
  • 删除node-modules,package-lock.json和yarn.lock。
  • 使用npm --save iyarn add安装所有这些,以便每个都具有相同的版本。

这应该工作!

在我的情况下,我错过了jest-environment-jsdom包。

© www.soinside.com 2019 - 2024. All rights reserved.