我希望与Jest一起写我所谓的结构性期望,但不确定如何实现。
首先,我有一个graphql服务器和一个包含许多待办事项的数据库。我目前有以下测试,如果数据库中的内容与我编写的响应相同,则仅返回true。我要检查的是,响应看起来像一个对象,数据可能是任何东西。
这是我拥有的代码:
describe('To Do:', () => {
it('add todo items', async () => {
const response = await axios.post('http://localhost:5000/graphql', {
query: `
query {
getTodoItems {
message
id
dateCreated
dateDue
}
}
`
});
const { data } = response;
expect(data).toMatchObject({
data: {
getTodoItems: [
{
message: "message",
id: "5bd9aec8406e0a2170e04494",
dateCreated: "1540992712052",
dateDue: "1111111111"
},
{
message: "message",
id: "5bd9aeec60a9b2579882a308",
dateCreated: "1540992748028",
dateDue: "1111111111"
},
{
message: "new message",
id: "5bd9af15922b27236c91837c",
dateCreated: "1540992789836",
dateDue: "1111111111"
}
]
}
})
});
});
现在我想写这样的东西,其中可以有任意数量的返回项目,它们遵循类似的结构:
describe('To Do:', () => {
it('add todo items', async () => {
const response = await axios.post('http://localhost:5000/graphql', {
query: `
query {
getTodoItems {
message
id
dateCreated
dateDue
}
}
`
});
const { data } = response;
expect(data).toMatchObject({
data: {
getTodoItems: [
{
message: expect.any(String),
id: expect.any(String),
dateCreated: expect.any(String),
dateDue: expect.any(String)
} // There needs to be unlimited additional items here
]
}
})
});
});
我一直在浏览文档,甚至尝试嵌套期望,但似乎无法获得期望的响应。让我知道您的想法或是否可以以任何方式澄清。
答案 0 :(得分:0)
我想出了最好的方法。我希望听到更好的答案。我在测试范围内将一个函数编写为jest.fn,然后对其进行了调用。在该函数中,我进行了自定义检查,以解析响应中接收到的数据。从那里,我使用“ toHaveReturnedWith”方法添加了一个Expect函数,以查看自定义函数的响应并完成测试。
const addTodoResponse = jest.fn(() => {
// Custom parsing and check here
// Returns true or false
});
addTodoResponse();
expect(addTodoResponse).toHaveReturnedWith(true);
还有更好的方法可以做到这一点吗?