Написание структурных ожиданий с шуткой - PullRequest
0 голосов
/ 31 октября 2018

Я собираюсь написать то, что я называю структурными ожиданиями, с помощью Jest, и я не уверен, как этого можно достичь.

Для начала у меня есть сервер Graphql и база данных с множеством элементов todo. В настоящее время у меня есть следующий тест, который просто возвращает 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 голосов
/ 31 октября 2018

Я нашел лучший способ сделать это. Я хотел бы услышать лучшие ответы. Я написал функцию в рамках теста как jest.fn, а затем вызвал ее. В этой функции я сделал пользовательские проверки для анализа данных, полученных в ответе. Оттуда я добавил ожидаемую функцию с помощью метода toHaveReturnedWith, чтобы увидеть ответ моей пользовательской функции и завершить тест.

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

addTodoResponse();

expect(addTodoResponse).toHaveReturnedWith(true);

Есть ли лучшие способы сделать это там?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...