我有一个测试,我想测试我接收到的对象值类型是否与模式匹配。问题是,对于某些键,我可能会收到一些东西或空
到目前为止我试过这个
const attendeeSchema = {
birthDate: expect.extend(toBeTypeOrNull("Date")),
contact: expect.extend(toBeTypeOrNull(String)),
createdAt: expect.any(Date),
firstName: expect.any(String),
id: expect.any(Number),
idDevice: expect.extend(toBeTypeOrNull(Number)),
information: expect.extend(toBeTypeOrNull(String)),
lastName: expect.any(String),
macAddress: expect.extend(toBeTypeOrNull(String)),
updatedAt: expect.any(Date),
// state: toBeTypeOrNull()
};
const toBeTypeOrNull = (received, argument) => {
const pass = expect(received).toEqual(expect.any(argument));
if (pass || received === null) {
return {
message: () => `Ok`,
pass: true
};
} else {
return {
message: () => `expected ${received} to be ${argument} type or null`,
pass: false
};
}
};
字符串
在我的测试中
expect(res.result.data).toBe(attendeeSchema);
型
我也试过平等和其他东西。
我的考试没有通过
TypeError: any() expects to be passed a constructor function. Please pass one or use anything() to match any object.
型
我不知道该怎么办。如果有人有想法谢谢
8条答案
按热度按时间new9mtju1#
前面给出的所有响应在其实现中都不正确地使用了
expect()
,因此它们实际上并不起作用。您需要的是一个像
any()
一样工作的jest匹配器,但它接受空值,并且在其实现中不使用expect()
函数。您可以通过复制原始的any()
实现(来自Jasmine)来实现此扩展,但在开始时添加了null测试:字符串
将上面的内容放入一个
.js
文件中,然后用jestsetupFilesAfterEnv
配置变量指向该文件。现在你可以像这样运行测试:型
jhiyze9q2#
在前面两个答案的基础上,一种更常见的方法是将核心匹配器 Package 在try/catch块中
字符串
9rnv2umw3#
您可以使用jest-extended中的
toBeOneOf
。安装
jest-extended
以使expect.toBeOneOf
可用后:个字符
uqdfh47h4#
实际上,我根本不知道Jest,但我看了一下,因为代码测试目前对我很感兴趣。
从我在expect.extend文档中看到的内容来看,您似乎使用了错误的方法。你现在给它的是调用
toBeTypeOrNull
的结果,例如在birthDate: expect.extend(toBeTypeOrNull("Date")),
中,而不是函数本身。这可能会导致调用有一个未定义的参数,因为它是用2个参数(received, argument)
声明的。然后argument
是未定义的,你不能在你的自定义函数中执行expect.any(argument)
。从我在文档中看到的来看,你应该在一开始就用一个包含所有自定义函数的对象调用
extend
,这样你就可以在以后使用它们。试试这段代码,如果出现问题,请不要犹豫:更新:
objectContaining
和toMatchObject
的区别,see this answer字符串
qlvxas9a5#
我决定使用一个通用的“any of”来代替特定的处理程序:
字符串
它可以这样使用:
型
yv5phkfx6#
我正在寻找一些东西来验证任何类型或
null
,并遇到了这个答案,这是95%的权利。问题出在这一行,因为在尝试比较null
和argument
时,预期失败。字符串
作为奖励,我创建了一个
toBeObjectContainingOrNull
。下面是我的代码:型
然后你可以使用
toBeObjectContainingOrNull
如下:型
希望能帮上忙。
rhfm7lfc7#
已经在expect-more-jest中实现
这将工作:
字符串
o7jaxewo8#
我的解决方案是在运行'expect'语句之前简单地修改输入数据,例如:
schema值应该如下所示:
字符串
在test中,在expect之前,我们修改输入数据以检查值是string还是null:
型