我有一个API,它不会忽略带有“空”的字段的JSON序列化(null,none,nil)值,并将它们全部返回为"fieldName": null
。(类型脚本),我想将这些字段设置为可选字段(?),并在许多地方对它们不加定义。不幸的是(对我来说)笑话也是笑话()处理未定义的(测试代码中的值)和null(来自API的值)作为不同的值。我目前的解决方案是使用像string | null
这样的联合类型,但它相当冗长,因为我总是要初始化这些字段。我检查了jest的引用,没有找到现成的解决方案。那么,创建一个自定义匹配器是解决我的问题的唯一方法吗?我无法更改API中的序列化策略。
5条答案
按热度按时间zf9nrax11#
expect(null).toBe(undefined)
失败!基本上,有时在对对象求值后,一边是
null
,另一边是undefined
我尝试使用其他jest方法,如
toEqual
,但symply不起作用。我的解决方案
expect(null == undefined).toBe(true)
rhfm7lfc2#
你可以用Jest创建任何你想要的匹配。例如,这可能正是你所需要的:
您可以将其添加到某个安装脚本中,我只是为了测试而将其添加到beforeAll中。
以下是相关文档:
https://jestjs.io/docs/en/expect#expectextendmatchers
https://jestjs.io/docs/en/expect#custom-matchers-api
nhaq1z213#
经过长时间的搜索,这个难题的最佳解决方案是使用
.toBeTruthy
,如果值是null
或undefined
. details here但是,请记住,如果使用空字符串和
false
布尔值,它将失败xmq68pz94#
使用jest-extended(Jest社区维护的附加Jest匹配器),您可以使用
toBeNil()
:检查值是否为
null
或undefined
时,使用.toBeNil
。参见:https://github.com/jest-community/jest-extended#tobenil
cedebl8k5#
使用
expect(null || undefined).toBeFalsy()
-这是jest推荐的:https://jestjs.io/docs/expect#tobefalsy