Jestjs 笑话:expect或expect…不基于布尔值

Jestjs 笑话:expect或expect…不基于布尔值,jestjs,Jestjs,开玩笑地使用test.each,我想传入一个布尔值,用于切换我是否期望得到某样东西 这是我试图避免的重复代码类型: if(expectFoo){ expect(一个对象).toContainEqual( expect.objectContaining({ 姓名:“富” }) ); }否则{ expect(一个对象).not.toContainEqual( expect.objectContaining({ 姓名:“富” }) ); } 下面是一些伪代码,它们说明了我首选的(更简洁、更短的)方法

开玩笑地使用
test.each
,我想传入一个布尔值,用于切换我是否期望得到某样东西

这是我试图避免的重复代码类型:

if(expectFoo){
expect(一个对象).toContainEqual(
expect.objectContaining({
姓名:“富”
})
);
}否则{
expect(一个对象).not.toContainEqual(
expect.objectContaining({
姓名:“富”
})
);
}
下面是一些伪代码,它们说明了我首选的(更简洁、更短的)方法:

expect(一个对象).yesOrNo(expectFoo).toContainEqual(
expect.objectContaining({
姓名:“富”
})
);
Jest中有类似的东西吗?

内置匹配器,但可以从Jest使用的相同内部模块导入:

import matchers from 'expect/build/matchers';
自定义匹配器可以包装和组合内置匹配器:

expect.extend({
  toContainFoo(received, expectFoo = true) {
    const isNot = !expectFoo ? !this.isNot : this.isNot
    this.isNot = isNot; // affects error message
    const expected = matchers.objectContaining({
      name: "foo"
    });
    const result = matchers.toContainEqual.call(this, received, expected);
    result.pass = !isNot; // affects assertion logic
    return result;
  }
})

这是custom matcher.OK的情况,但我真的不想从头开始重建OOTB Jest matcher,比如
.toContaineEqual()
objectContaining()
,等等。我真的不知道如何为介于
expect()
和另一个匹配器之间的
not
之类的东西编写自定义替换。可以吗?没有注意到评论。这里有一个例子,如果它仍然相关的话。这并不是我所希望的那样,因为你必须为每个匹配器或匹配器的组合分别实现它。如果有一个像泛型
而不是
这样的替换项,并使用一个布尔参数,那就太好了。但这肯定比重建匹配者自己的逻辑要好。谢谢