将 Chai 断言库与 Mocha 一起使用

发布于 2022-08-02 12:36:40 字数 3658 浏览 227 评论 0

Chai 编写测试套件时最流行的断言库之一 Mocha 。 本文假设您已经熟悉 Mocha,因此请先查看 我们对 Mocha 的介绍

Chai 支持 3 种不同的断言风格 expectshouldassertexpect 最常见,因为 should 修改 Object.prototypeassert并没有提供太多好处 内置的 Node.js 相比 assert 图书馆

开始使用 expect

假设你有一个基本功能 sum() 将两个数字相加:

module.exports = function sum(a, b) {
  return a + b;
};

下面是你如何写一个 sum.test.js 测试上述内容的文件 sum.js 文件。

const { expect } = require('chai');
const sum = require('./sum');

describe('sum()', function() {
  it('adds two numbers', function() {
    // `expect()` takes in a parameter value and returns what Chai calls
    // a "chain"
    expect(sum(2, 4)).to.equal(6);
  });

  it('ignores additional arguments', function() {
    expect(sum(2, 4, 6)).to.equal(6);
  });
});

目标 柴的 expectshould 接口是允许您以模仿自然语言的方式编写断言 。 例如,要断言一个值是一个包含 '3' 的数组,你可以这样写:

expect([1, 2, 3]).to.be.an('array').that.includes(3);

// Throws "AssertionError: expected [ 1, 2, 3 ] to include 4"
expect([1, 2, 3]).to.be.an('array').that.includes(4);

Chai 文档有 语言链和比较的完整列表

对象比较 expect

expect API 是可链接的并且非常有表现力。 高级柴用户可以经常用一个来写他们所有的断言 expect 链。

例如,假设您有一个具有多个属性的对象:

const movie = {
  title: 'Jingle All The Way',
  releaseDate: new Date('1996-11-22'),
  imdb: 'https://www.imdb.com/title/tt0116705/?ref_=nv_sr_1?ref_=nv_sr_1'
};

断言另一个对象的深度等于 movie,你可以这样做:

const value = Object.assign({}, movie);

// Add the `deep` modifier to make Chai check whether the object properties
// are equal, rather than the top-level objects.
expect(value).to.deep.equal(movie);

通常你不想断言两个对象在深度上完全相等,但是对象具有某些属性集。 例如,要检查 movie 有正确的 titlereleaseDate,但忽略 imdb 和其他属性,使用 .include()

expect(movie).to.deep.include({
  title: 'Jingle All The Way',
  releaseDate: new Date('1996-11-22')
});

开始使用 should

should 接口 支持相同的链接接口 expect()。关键区别在于 Chai 添加了一个 should() 函数到每个 JavaScript 值。 这意味着你不必打电话 expect() 显式地,这使得断言读起来更像自然语言。

require('chai').should();
const sum = require('./sum');

describe('sum()', function() {
  it('adds two numbers', function() {
    // Numbers now have a `.should()` function
    sum(2, 4).should.equal(6);
  });

  it('ignores additional arguments', function() {
    sum(2, 4, 6).should.equal(6);
  });
});

许多项目避免使用 should() 因为,在生产中,你的价值观不会有 should() 功能。 如果被测代码使用 should()? 您的测试将成功,但您的代码将在生产中失败。 由于这种取舍, expect() 比更常见 should(),但人们确实使用 should()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

绅刃

暂无简介

文章
评论
26 人气
更多

推荐作者

夢野间

文章 0 评论 0

doggiejohn

文章 0 评论 0

就此别过

文章 0 评论 0

初见终念

文章 0 评论 0

qq_rvKjBH

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文