gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:10:35 26 4
gpt4 key购买 nike

我有一个 API,它不会省略具有“空”(空,无,零)值的字段的 JSON 序列化,并将它们全部返回为 "fieldName": null 。我在测试代码 (TypeScript) 中输入了 DTO,并且我想将这些字段设为可选 (?) 并在许多地方将它们保留为未定义。不幸的是(对我而言)jest 的 toEqual() 将 undefined(测试代码中的值)和 null(来自 API 的值)视为不同的值。
我目前的解决方案是使用联合类型,如 string | null ,但它非常冗长,因为我必须始终初始化这些字段。
我检查了 jest 的引用资料,没有找到“现成的”解决方案。那么,创建自定义匹配器是解决我的问题的唯一方法吗?
注意:我无法更改 API 中的序列化策略。

最佳答案

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

beforeAll(function () {
expect.extend({
toBeMyEqual(received, expected) {
const pass = this.equals(received, expected) ||
(received === null && received === undefined) ||
(received === undefined && received === null);
if (pass) {
return {
message: () =>
`expected ${received} not to equal ${expected}`,
pass: true,
};
} else {
return {
message: () =>
`expected ${received} to equal ${expected}`,
pass: false,
};
}
}
})
})

test('should pass', () => {
expect(null).toBeMyEqual(undefined);
})
您可以将它添加到一些设置脚本中,我只是为了测试而将它添加到 beforeAll 中。
这是相关文档:
https://jestjs.io/docs/en/expect#expectextendmatchers
https://jestjs.io/docs/en/expect#custom-matchers-api

关于typescript - 是否有一个像 toEqual 一样工作的 Jest 匹配器,但将 null 和 undefined 视为相等的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61811864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com