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
之类的东西编写自定义替换。可以吗?没有注意到评论。这里有一个例子,如果它仍然相关的话。这并不是我所希望的那样,因为你必须为每个匹配器或匹配器的组合分别实现它。如果有一个像泛型而不是这样的替换项,并使用一个布尔参数,那就太好了。但这肯定比重建匹配者自己的逻辑要好。谢谢