Javascript react创建应用程序,使用mocha和chai进行typescript单元测试支持es6模块的正确设置是什么?
你好,我是新的反应和打字脚本。我已经用Javascript react创建应用程序,使用mocha和chai进行typescript单元测试支持es6模块的正确设置是什么?,javascript,reactjs,typescript,unit-testing,mocha.js,Javascript,Reactjs,Typescript,Unit Testing,Mocha.js,你好,我是新的反应和打字脚本。我已经用react create app创建了一个应用程序,并添加了typescript。完成应用程序模块后,我想做一些单元测试,我已经安装了mocha和chai:npm安装——保存dev mocha chai 在我的pakadge.json中,我将测试脚本更新为“test”:“mocha src/test/*”。在我的测试文件中使用导入后 import {assert} from 'chai' import {File} from "../compone
react create app
创建了一个应用程序,并添加了typescript。完成应用程序模块后,我想做一些单元测试,我已经安装了mocha和chai:npm安装——保存dev mocha chai
在我的pakadge.json中,我将测试脚本更新为“test”:“mocha src/test/*”
。在我的测试文件中使用导入后
import {assert} from 'chai'
import {File} from "../components/File"
我遇到了一个问题
import {assert} from 'chai'
^^^^^^
SyntaxError: Cannot use import statement outside a module
我已经搜索了很多,尝试了很多答案,比如,但仍然遇到了相同的问题-389;-我不知道是否需要安装巴贝尔?这是我的package.json
任何解释
{
...
“依赖项”:{
“@测试库/jest dom”:“^5.11.9”,
“@testing library/react”:“^11.2.5”,
“@测试库/用户事件”:“^12.8.3”,
“@types/classnames”:“^2.2.11”,
“@types/jest”:“^26.0.22”,
“@types/node”:“^14.14.37”,
“@types/react”:“^17.0.3”,
“@types/react-dom”:“^17.0.3”,
“类名”:“^2.2.6”,
“节点sass”:“^5.0.0”,
“反应”:“^17.0.1”,
“react dom”:“^17.0.1”,
“反应脚本”:“4.0.3”,
“类型脚本”:“^4.2.3”,
“web重要信息”:“^1.1.1”
},
“脚本”:{
“开始”:“反应脚本开始”,
“构建”:“反应脚本构建”,
“测试”:“跨环境节点项目=\”tsconfig.testing.json\“mocha src/test/*”,
“弹出”:“反应脚本弹出”
},
...
“依赖性”:{
“@types/chai”:“^4.2.16”,
“@types/mocha”:“^8.2.2”,
“柴”:“^4.3.4”,
“交叉环境”:“^7.0.3”,
“摩卡”:“^8.3.2”
}
}
这是我的tsconfig.json
{
“编译器选项”:{
“目标”:“es5”,
“lib”:[
“dom”,
“dom.iterable”,
“下一步”
],
“allowJs”:正确,
“skipLibCheck”:正确,
“esModuleInterop”:正确,
“allowSyntheticDefaultImports”:true,
“严格”:是的,
“ForceConsistentCasingFileNames”:true,
“noFallthroughCasesInSwitch”:正确,
“模块”:“esnext”,
“moduleResolution”:“节点”,
“resolveJsonModule”:true,
“隔离模块”:正确,
“noEmit”:没错,
“jsx”:“react jsx”
},
“包括”:[
“src”
]
}
如何正确设置所有内容?有两个选项
ts mocha
快捷方式=>npm安装--保存开发人员ts mocha
tsconfig.testing.json
{
“编译器选项”:{
“模块”:“commonjs”,
“目标”:“es5”
},
“包括”:[“src/test/*”]
}
这是一个基本配置,您可以根据需要进行更新
将脚本添加到package.json
scripts:测试ts:“ts mocha-p tsconfig.testing.json src/test/*”
您应该注意导入可能遇到问题的文本文件。这将导致标记错误,因此将它们移动到另一个文件中,并确保您的utils
function在运行单元测试后是纯函数
另一个重要注意事项:您应该设置“模块”:“commonjs”
来解决冲突问题,例如您的不能在模块之外使用import语句
使用普通的mocha
和ts节点/寄存器执行TypeScript李>
- 您应该安装
ts节点
和cross-env
以使用新的tsconfig.testing.json
- 这是对
tsconfig.testing.json
的简单配置。注意:您应该将up配置模块解决方案
添加到节点
查看更多详细信息。如果存在任何类型的错误,请将路径添加到声明类型,以避免出现类型错误error TS2304:找不到名称“type\u name”
- 将脚本添加到
package.json
scripts:cross-env TS_NODE_PROJECT=\“tsconfig.testing.json\”mocha-r TS NODE/register src/test/*
{
“ts节点”:{
“文件”:真
},
“编译器选项”:{
“目标”:“es5”,
“模块”:“CommonJS”,
“moduleResolution”:“节点”
},
“包括”:[
“src”
],
“排除”:[
“/node_modules/”,
“/dist/”
],
“文件”:[
“路径\u到\u您的\u类型\u声明”
]
}
对于错误,将其更改为:从'chai'导入assert,您可能还需要在tsconfig.json中的lib中添加“es2015”,请尝试并告知我否,它不会修复错误问题是mocha和chai不支持es6您说mocha不支持es6,但在tsconfig中的lib中,我看到您正在起诉es5,不是吗,我通常是这样使用它的:从'chai'导入{expect};进口摩卡咖啡;这里有一个例子:descripe('add function',()=>{it('should add two and two',()=>{const result=add(2,2);expect(result).to.equal(4);});it('should add-2 and two',()=>{const result=add(-2,2);expect(result).to.equal(0);});你为它添加了巴别塔吗?你如何运行测试?为了让摩卡了解es6车型,您添加了哪些内容。