Mocha + Chai 单元测试入门教程

在现代 JavaScript 开发中,单元测试是保证代码质量的重要手段。通过单元测试,你可以对代码进行自动化测试,确保其在不同情况下的表现符合预期。

Mocha 是一个流行的测试框架,而 Chai 是一个功能强大的断言库。本文将带你快速入门 Mocha 和 Chai,并展示如何编写简单的单元测试。

1. 什么是 Mocha 和 Chai

  • Mocha:Mocha 是一个功能丰富、灵活的 JavaScript 测试框架,支持异步测试和多种测试风格(BDD、TDD)。
  • Chai:Chai 是一个断言库,它与 Mocha 配合使用,支持多种风格的断言,包括 expectshouldassert

2. 安装 Mocha 和 Chai

首先,你需要在项目中安装 Mocha 和 Chai:

npm install --save-dev mocha chai

安装完成后,你可以通过修改 package.json 文件来配置 Mocha 的测试脚本:

{
    "scripts": {
        "test": "mocha"
    }
}

3. 编写第一个测试用例

创建一个名为 test 的文件夹,并在其中创建测试文件 example.test.js

const { expect } = require('chai');

// 示例函数
const add = (a, b) => a + b;

describe('Addition function', () => {
  it('should return the sum of two numbers', () => {
    expect(add(2, 3)).to.equal(5);
  });
});

运行测试:

npm test

你会看到测试通过的结果。如果修改了 expect(add(2, 3)).to.equal(5) 为其他数值,测试将失败。

4. Chai 断言风格

Chai 支持三种不同风格的断言:

    4.1. Expect 风格

expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);

    4.2 Should 风格

foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);

    4.3 Assert 风格

assert.typeOf(foo, 'string');
assert.equal(foo, 'bar');
assert.lengthOf(foo, 3);

5. 异步测试

Mocha 支持异步测试。你可以使用 done 回调,或者结合 async/awaitchai-as-promised 来测试异步代码。

使用 done 回调:

it('should test async function', (done) => {
  setTimeout(() => {
    expect(true).to.be.true;
    done();
  }, 100);
});

使用 async/await 和 chai-as-promised:

npm install chai-as-promised
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

it('should resolve the promise', async () => {
  const promise = Promise.resolve('done');
  await expect(promise).to.eventually.equal('done');
});

6. 多重断言

你可以在同一个测试中进行多重断言:

it('should pass all assertions', () => {
  const result = { name: 'John', age: 30, active: true };

  expect(result).to.have.property('name').that.equals('John');
  expect(result).to.have.property('age').that.is.a('number');
  expect(result).to.have.property('active').that.is.true;
});

7. 总结

  • Mocha 提供了灵活的测试框架,支持异步操作。
  • Chai 是功能强大的断言库,支持多种断言风格。
  • 通过 chai-as-promised,可以简化对异步代码的测试。

更多内容请参阅官方文档: