假设我有一个数组 arr = [true, false, false, true, false]
。
我想断言这个数组中正好有两个值是真的。显然,我可以做这样的事情(使用 lodash):
Chai.expect(_.filter(arr, item => item == true)).to.have.length(2)
是否有更 Chai-y 或 Jest-y 的方式来做到这一点?
最佳答案
对此没有专门的方法。需要自定义断言。
最接近的断言方法如下:
- Jest 有 expect.arrayContaining(array)断言函数;
- Chai 有expect(array).to.have.members(array)断言函数。
这两个选项都不适合,因为你的期望值是一个值类型,上面的函数使用 ===
进行比较(它可以改变,至少在 Chai 中,但对我们来说仍然没有区别例)。
// Jest example
describe('arrayContaining', () => {
const expected = [true, true];
it('does not match: not enough `true` values received', () => {
expect([true, false, false]).not.toEqual(expect.arrayContaining(expected));
});
it('does not match: not enough toatl values received', () => {
expect([true]).not.toEqual(expect.arrayContaining(expected));
});
});
上面的两个断言都会失败,这意味着这些断言规则/函数无法发现给定情况下预期值和实际值之间的差异。
关于javascript - 期待几个但不是全部正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734343/