用笑话写结构性期望

时间:2018-10-31 14:52:28

标签: graphql jestjs

我希望与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
                  ]
            }
        })
    });
});

我一直在浏览文档,甚至尝试嵌套期望,但似乎无法获得期望的响应。让我知道您的想法或是否可以以任何方式澄清。

1 个答案:

答案 0 :(得分:0)

我想出了最好的方法。我希望听到更好的答案。我在测试范围内将一个函数编写为jest.fn,然后对其进行了调用。在该函数中,我进行了自定义检查,以解析响应中接收到的数据。从那里,我使用“ toHaveReturnedWith”方法添加了一个Expect函数,以查看自定义函数的响应并完成测试。

const addTodoResponse = jest.fn(() => {
    // Custom parsing and check here
    // Returns true or false
});

addTodoResponse();

expect(addTodoResponse).toHaveReturnedWith(true);

还有更好的方法可以做到这一点吗?