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
  • Mocha瘦包装,允许使用TypeScript运行时(ts节点)运行TypeScript测试,以消除编译复杂性。所有摩卡咖啡功能均无任何限制

    将此ts配置用于测试
    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车型,您添加了哪些内容。