我无法测试使用create-react-app创建的应用程序,所有指南都说默认情况下测试工作正常,但是当我尝试“纱线测试”时,它需要安装'jest-cli'并在安装后出现错误“TypeError:environment。拆解不是一个功能“。
您不需要自己安装jest-cli,它应该是开箱即用的。
请尝试以下方法:
npm install
或yarn install
。将“jest-environment-jsdom”的新版本添加到“package.json”。
在我的情况下,它抛出此错误,因为我使用create-react-app
创建我的反应项目并安装jest
。它以某种方式发生冲突。
我通过从我的项目中删除jest
并使用create-react-app
测试脚本来解决它。
经过一个关于这个问题的傍晚,我想我终于解决了这个问题。首先,让我来描述一下这个问题:
我也得到了:
TypeError: environment.teardown is not a function
因为我试图将jest升级到最新版本。使用Create-React-App启动应用程序时,它会安装不包含所有功能的早期版本的jest。我对使用inlineSnapshots功能感兴趣,该功能允许您在测试文件中针对HTML标记声明呈现的组件。
您应该注意的Create-React-App或jest文档中没有包含一些内容。如果要使用较新的jest功能,例如inlineSnapshots,则需要执行以下操作:
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正常工作。
对我来说,这是模块导入绑定。基本上对我来说,它是模块导出/导入绑定。
基本上如果它是使用module.export
导出的,你应该使用require
导入。如果它是使用export
或export default
导出的,则应使用import
导入。
这里不允许混合。
如果您还没有将create-react-app
用于该项目:
jest, jest-cli, jest-environment-jsdom
删除package.json
。npm --save i
或yarn add
安装所有这些,以便每个都具有相同的版本。这应该工作!
在我的情况下,我错过了jest-environment-jsdom
包。