Typescript 是否有一个像toEqual一样工作的玩笑匹配器,但将null和undefined视为相等的值?

Typescript 是否有一个像toEqual一样工作的玩笑匹配器,但将null和undefined视为相等的值?,typescript,jestjs,Typescript,Jestjs,我有一个API,它不会忽略带有“empty”(null,none,nil)值的字段的JSON序列化,并将所有字段返回为“fieldName”:null。我已经在测试代码(TypeScript)中键入了dto,我想将这些字段设置为可选(?),并在许多地方不定义它们。不幸的是(对我来说),jest的toEqual()将未定义(测试代码中的值)和null(API中的值)视为不同的值。 我目前的解决方案是使用诸如string | null之类的联合类型,但它非常冗长,因为我必须始终初始化这些字段。 我查

我有一个API,它不会忽略带有“empty”(null,none,nil)值的字段的JSON序列化,并将所有字段返回为
“fieldName”:null
。我已经在测试代码(TypeScript)中键入了dto,我想将这些字段设置为可选(?),并在许多地方不定义它们。不幸的是(对我来说),jest的toEqual()将未定义(测试代码中的值)和null(API中的值)视为不同的值。 我目前的解决方案是使用诸如
string | null
之类的联合类型,但它非常冗长,因为我必须始终初始化这些字段。 我查看了jest的参考资料,没有找到“现成”的解决方案。那么,创建自定义匹配器是解决我的问题的唯一方法吗? 注意:我无法更改API中的序列化策略。

expect(null)。toBe(未定义)
失败! 基本上你所拥有的是,有时在评估一个对象之后,你在一边有
null
,在另一边有
undefined

我试着使用其他的玩笑方法,如
toEqual
,但symply不起作用

我的解决方案
expect(null==undefined)。为(true)

您可以使用Jest创建任何您想要的匹配项。例如,这可能正是您需要的:

beforeAll(函数(){
期待({
toBeMyEqual(已收到,预计收到){
const pass=this.equals(已接收,预期)||
(接收===null&&received==未定义)||
(接收===未定义和接收===空);
如果(通过){
返回{
消息:()=>
`预期${received}不等于${expected}`,
通过:是的,
};
}否则{
返回{
消息:()=>
`预期${received}等于${expected}`,
通过:错误,
};
}
}
})
})
测试('应该通过',()=>{
expect(null).toBeMyEqual(未定义);
})
您可能可以将它添加到一些设置脚本中,我只是为了测试而在beforeAll中添加了它

以下是相关文件: