• Mocha + Chai 测试环境配置,支持 ES6 语法


    下面是一个完整的 Mocha + Chai 测试环境配置,支持 ES6 语法。我们将使用 Babel 来转译 ES6 代码。

    步骤一:初始化项目

    首先,在项目目录中运行以下命令来初始化一个新的 Node.js 项目:

    npm init -y
    

    步骤二:安装必要的依赖包

    接下来,安装 Mocha、Chai 和 Babel 相关的包:

    npm install --save-dev mocha chai @babel/core @babel/preset-env @babel/register
    

    步骤三:配置 Babel

    在项目根目录创建一个 .babelrc 文件,配置 Babel 使用 @babel/preset-env 进行转译:

    {
      "presets": ["@babel/preset-env"]
    }
    

    步骤四:编写测试脚本

    package.json 中,更新 scripts 部分,添加一个运行 Mocha 的脚本,并使用 Babel 注册器来转译测试代码:

    "scripts": {
      "test": "mocha --require @babel/register"
    }
    

    步骤五:编写测试用例

    在项目中创建一个 test 目录,然后在该目录中创建一个测试文件,例如 test/example.test.js:

    // test/example.test.js
    import { expect } from 'chai';
    
    describe('Array', () => {
      describe('#indexOf()', () => {
        it('should return -1 when the value is not present', () => {
          expect([1, 2, 3].indexOf(4)).to.equal(-1);
        });
      });
    });
    

    步骤六:运行测试

    在项目根目录,运行以下命令来执行测试:

    ```sh
    npm test
    

    如果一切配置正确,Mocha 会运行测试并显示测试结果。

    这样,你就有了一个支持 ES6 语法的 Mocha + Chai 测试环境。

    错误集合

    1. 如果遇到错误:

     Exception during run: Error [ERR_REQUIRE_ESM]: require() of ES Module /xxxx/node_modules/chai/chai.js from /xxxx/test/scripts/domain/utils/example.test.js not supported.
    Instead change the require of chai.js in /xxxx/test/scripts/domain/utils/example.test.js to a dynamic import() which is available in all CommonJS modules.
        at Object.newLoader [as .js] (/xxxx/node_modules/pirates/lib/index.js:121:7)
        at Object.<anonymous> (/xxxx/test/scripts/domain/utils/example.test.js:3:13)
        at Module._compile (/xxxx/node_modules/pirates/lib/index.js:117:24)
        at Object.newLoader [as .js] (/xxxx/node_modules/pirates/lib/index.js:121:7)
        at async formattedImport (/xxxx/node_modules/mocha/lib/nodejs/esm-utils.js:9:14)
        at async exports.requireOrImport (/xxxx/node_modules/mocha/lib/nodejs/esm-utils.js:42:28)
        at async exports.loadFilesAsync (/xxxx/node_modules/mocha/lib/nodejs/esm-utils.js:100:20)
        at async singleRun (/xxxx/node_modules/mocha/lib/cli/run-helpers.js:125:3)
        at async exports.handler (/xxxx/node_modules/mocha/lib/cli/run.js:370:5) {
      code: 'ERR_REQUIRE_ESM'
    }
    

    在 package.json 中添加 “type”: “module” 来指示 Node.js 使用 ESM 模块系统,但这可能会影响到其他部分的代码,所以需要谨慎处理。

    2. 如果遇到错误:

     Exception during run: Error: Cannot find module '/xxxx/app/scripts/domain/utils/example' imported from /xxxx/test/test/scripts/domain/utils/example.test.js
        at finalizeResolution (node:internal/modules/esm/resolve:255:11)
        at moduleResolve (node:internal/modules/esm/resolve:908:10)
        at defaultResolve (node:internal/modules/esm/resolve:1121:11)
        at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:396:12)
        at ModuleLoader.resolve (node:internal/modules/esm/loader:365:25)
        at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:240:38)
        at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:85:39)
        at link (node:internal/modules/esm/module_job:84:36) {
      code: 'ERR_MODULE_NOT_FOUND',
      url: 'file:///xxxx/app/scripts/domain/utils/example'
    }
    

    在引入文件的后面要带上扩展名(node.js 是可以省略, 去找 .js, .json 等, 这里不能缺省):

    // 错误:
    // import {ABC} from '../xxxxxxx/xxxx';
    
    // 正确
    import {ABC} from '../xxxxxxx/xxxx.js';
    
  • 相关阅读:
    docker mysql 容器中执行mysql脚本文件并解决乱码
    AbstractBeanDefinition解读
    考研高数背诵类知识点-张宇(不定期更新)
    Pandas 2.2 中文官方教程和指南(十七)
    NginX + PostgreSQL + uWSGI + Django
    基于Java的交通事故档案管理系统设计与实现(源码+lw+部署文档+讲解等)
    基于arm-linux-gcc版本,音乐视频播放器mplayer
    单行函数,聚合函数课后练习
    【矩阵论】4.矩阵运算——广义逆——定义性质与特殊矩阵的广义逆
    如何做好测试用例设计
  • 原文地址:https://blog.csdn.net/galoiszhou/article/details/139626511