Chai 断言数量
ChaiJS 插件允许检查每个测试运行了多少个断言或期望。
为什么我们需要检查它?
让我们看看这个测试
import InstanceGenerator from '../lib/instances-generator';
describe('suite #1', () => {
it('test #1', () => {
class S1T1A {
/* Other props and methods are skipped */
/**
* I'm called after any instance of S1T1A is created
*/
afterCreate(...args) {
// I need to check `args` here
// chai.expect(args)...
}
}
InstanceGenerator.create(S1T1A, 3); // create 3 instances of S1T1A
});
});
测试看起来很蠢,但它的主要思想是,如果不使用虚拟标志,就无法判断 afterCreate
是否被调用。它必须在测试的最开始被初始化。然后它必须在 afterCreate
中被切换,并且在测试的最后必须添加另一个 expect
。
测试变得难以阅读。
更好的方法是检查执行了多少个 expect
。
安装
npm i -D chai-assertions-count
或
yarn add -D chai-assertions-count
插件
像使用其他 Chai 插件一样使用这个插件。
const chai = require('chai');
const chaiAssertionsCount = require('chai-assertions-count');
chai.use(chaiAssertionsCount);
用法
const chai = require('chai');
const chaiAssertionsCount = require('chai-assertions-count');
chai.use(chaiAssertionsCount);
describe('suite #2', () => {
beforeEach(() => {
chai.Assertion.resetAssertsCheck();
});
afterEach(() => {
// you don't need both of them
chai.Assertion.checkAssertionsCount();
chai.Assertion.checkExpectsCount();
});
});
方法 resetAssertsCheck
只会删除内部计数器,并且必须在每次测试之前使用。
方法 checkExpectsCount
计算 chai.expect
被调用的次数。在您的测试使用 Expect 样式的情况下使用它。
方法 checkAssertionsCount
计算执行的断言数量。此方法与上一个方法的主要区别在于单个 expect
可能执行多个 assertion
。以下示例说明了这一点
const chai = require('chai');
const chaiAssertionsCount = require('chai-assertions-count');
chai.use(chaiAssertionsCount);
describe('suite #3', () => {
it('test #1', () => {
chai.Assertion.expectAssertions(3);
chai.Assertion.expectExpects(2);
chai.expect(1).to.be.equal(1);
chai.expect([]).to.have.property('length', 0);
});
});
这里有两个期望,我们“期望”其中两个会被执行。同时,在“幕后”有三个断言。第一个 expect
只有一个断言。然而,第二个 expect
有两个。第一个检查属性 length
是否存在,另一个检查它的值。因此,要注意 expectAssertions
计数器。
方法 expectExpects
可以覆盖大多数情况,因此 expectAssertions
在 99.9% 的情况下不会被使用。
限制
- 仅适用于 Expect 样式。
- 在
expectExpects
或expectAssertions
失败时,停止当前套件中的其他测试。