将 Chai 断言库与 Mocha 一起使用

发布于 2022-08-02 12:36:40 字数 3658 浏览 219 评论 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技术交流群

发布评论

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

关于作者

绅刃

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_Yqvrrd

文章 0 评论 0

2503248646

文章 0 评论 0

浮生未歇

文章 0 评论 0

养猫人

文章 0 评论 0

第七度阳光i

文章 0 评论 0

新雨望断虹

文章 0 评论 0

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