Javascript 期望有几个,但不是全部正确

Javascript 期望有几个,但不是全部正确,javascript,testing,jestjs,chai,Javascript,Testing,Jestjs,Chai,假设我有一个数组arr=[true,false,false,true,false]。 我想断言在这个数组中有两个值是真的。显然,我可以这样做(使用lodash): 有没有比这更有趣的方法?没有专门的方法。需要自定义断言。 最接近的断言方法如下所示: Jest具有断言功能 Chai具有断言功能 这两个选项都不适合,因为您的期望值是一种值类型,并且上面的函数使用==进行比较(它可以更改,至少在Chai中可以更改,但在我们的情况下仍然没有差异) 上述两个断言都将失败,这意味着这些断言规则/函数无法

假设我有一个数组
arr=[true,false,false,true,false]
。 我想断言在这个数组中有两个值是真的。显然,我可以这样做(使用lodash):

有没有比这更有趣的方法?

没有专门的方法。需要自定义断言。 最接近的断言方法如下所示:

  • Jest具有断言功能
  • Chai具有断言功能
这两个选项都不适合,因为您的期望值是一种值类型,并且上面的函数使用
==
进行比较(它可以更改,至少在Chai中可以更改,但在我们的情况下仍然没有差异)


上述两个断言都将失败,这意味着这些断言规则/函数无法发现给定情况下预期值和实际值之间的差异。

您可以尝试类似于
expect(arr).toEqual(expect.arrayContaining([true,true])的方法
不清楚您是否希望断言有两项为真(3项必须为假),或者两项必须为真,但您不关心其他事项。
Chai.expect(_.filter(arr, item => item == true)).to.have.length(2)
// 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));
  });
});