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

时间:2018-06-05 09:02:59

标签: javascript reactjs unit-testing testing jestjs

我无法测试使用create-react-app创建的应用程序,所有指南都说测试默认工作,但是当我尝试"纱线测试"它需要安装' jest-cli'并且在安装后出现错误" TypeError:environment.teardown不是函数"。

6 个答案:

答案 0 :(得分:18)

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

尝试以下方法:

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

在我的情况下,它引发了此错误,因为我使用print(nom,', ', tit, '. ', jou, '.', dat, '. Pubmed: ' if len(pbm)!=0 else "", pbm if len(pbm)!=0 else "", sep="")创建了我的react项目并安装了create-react-app。在某种程度上,它有冲突。

我通过从项目中删除jest并使用jest测试脚本来解决该问题。

答案 3 :(得分:1)

经过一个晚上的讨论之后,我想我终于解决了。首先,让我描述一下问题:

我也得到了:

TypeError: environment.teardown is not a function

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

您应该知道,Create-React-App或jest的文档中未包含一些内容。如果要使用更新的笑话功能(例如inlineSnapshots),则需要执行以下操作:

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

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

/**
 * @jest-environment jsdom
 */

这指示玩笑在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 :(得分:1)

如果您尚未在项目中使用create-react-app

  • 只需从jest, jest-cli, jest-environment-jsdom中删除package.json
  • 删除节点模块,package-lock.json和yarn.lock。
  • 使用npm --save iyarn add安装它们,以使它们具有相同的版本。

这应该有效!

就我而言,我缺少jest-environment-jsdom包裹。

答案 5 :(得分:0)

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

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

这里不允许混音。