我希望将函数返回值的数据结构与更大的结构(即返回的结构"验证"针对更完整的哈希)进行匹配。我有一个使用toHaveProperty的工作测试,但我不必在我的测试中为这个特定问题定义我的对象结构。
我真正想要的东西是让我测试更大哈希中包含的结构(而不是值),并找不到两次调用该函数:
// ** this would fail if a property value is different **
test('thing returns something matching the structure within types', () => {
expect(thing()).toBeDefined(
expect(types).toMatchObject(thing())
);
});
这里的结构:
var types = {
changeSheet:{
command: ["s", "sheet"],
options: [],
required: [],
sheet_option: true,
},
checkIn:{
command: ["in", "i"],
options: ["-a", "--at"],
required: [],
sheet_option: false,
},
checkOut:{
command: ["out", "o"],
options: ["-a", "--at"],
required: [],
sheet_option: true,
}
};
这是我想要测试的功能:
function thing() {
return {changeSheet: {
command: ["s", "sheet"],
options: [],
required: [],
sheet_option: false,
}};
}
注意changeSheet.sheet_option与返回值与'类型'不同。哈希值。是否有一个jest匹配机制来检查我的结构并忽略这些值,还是我坚持使用toHaveProperty()?
答案 0 :(得分:2)
您可以使用Jest的expect(thing()).toMatchObject({
changeSheet: {
command: expect.arrayContaining([
expect.any(String),
expect.any(String)
]),
options: expect.any(Array),
required: expect.any(Array),
sheet_option: expect.any(Boolean)
}
});
匹配工具:http://facebook.github.io/jest/docs/en/expect.html#content
{{1}}
那就是说,你在这里测试的只是简单的结构/输入,通过使用类似TypeScript或Flow的静态类型检查器可以更好地完成。