我有一个测试,我想测试我收到的对象值类型是否与模式匹配。概率是对于某些键我可能会收到一些东西或 null
到目前为止我试过了
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);
我也试过 tobeEqual 和其他东西….
我的测试确实通过了
TypeError: any() expects to be passed a constructor function. Please pass one or use anything() to match any object.
我不知道在这里做什么..如果有人有想法谢谢
原文由 kikiwie 发布,翻译遵循 CC BY-SA 4.0 许可协议
之前给出的所有响应在其实现中都错误地使用了
expect()
,因此它们实际上不起作用。你想要的是一个像
any()
一样工作但接受空值并且不使用expect()
在其实现中的函数。您可以通过基本上复制原始的any()
实现(来自 Jasmine )来实现它作为扩展,但在开始时添加一个空测试:将以上内容放入
.js
文件中,然后使用 jestsetupFilesAfterEnv
配置变量指向该文件。现在您可以像这样运行测试: