Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Jest тесты для функций (https://javascript.ru/forum/misc/84265-jest-testy-dlya-funkcijj.html)

NovichokJS 24.07.2022 11:15

Jest тесты для функций
 
Как составить jest тест для функции
const createTask = taskData => {
  return fetch(baseUrl, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json;charset=utf-8',
    },
    body: JSON.stringify(taskData),
  });
};


Как-то я не так делаю видимо..

Создал файл для тестов и внутри пишу:

import { createTask } from "../tasksGateway";

it("should return response", () => {
  const task = createTask({ text: "abcde" });
  const baseUrl =
    "https://62d57413d4406e52355b320b.mockapi.io/api/v1/todo-list";
  expect(
    fetch(baseUrl, {
      method: "POST",
      headers: {
        "Content-Type": "application/json;charset=utf-8",
      },
      body: JSON.stringify({ text: "abcde" }),
    }).toEqual(response.json())
  );
});

рони 24.07.2022 12:45

Цитата:

Сообщение от NovichokJS
return fetch(baseUrl,

baseUrl как этот параметр попадает в taskData?

NovichokJS 24.07.2022 12:53

Цитата:

Сообщение от рони (Сообщение 546817)
baseUrl как этот параметр попадает в taskData?

const baseUrl = 'https://62d57413d4406e52355b320b.mockapi.io/api/v1/todo-list';

export const getTasksList = () => {
  return fetch(baseUrl).then(response => response.json());
};

export const createTask = taskData => {
  return fetch(baseUrl, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json;charset=utf-8',
    },
    body: JSON.stringify(taskData),
  });
};

рони 24.07.2022 13:06

NovichokJS,
Возможно кто-то другой вам поможет...

Nexus 24.07.2022 14:58

import {
    createTask
} from "../tasksGateway";

it("should return response", () => {
    const task = createTask({
        text: "abcde"
    });

    const baseUrl = "https://62d57413d4406e52355b320b.mockapi.io/api/v1/todo-list";

    expect(
        fetch(baseUrl, {
            method: "POST",
            headers: {
                "Content-Type": "application/json;charset=utf-8",
            },
            body: JSON.stringify({
                text: "abcde"
            }),
        }).toEqual(response.json())
    );
});


Если отформатировать код, то выявляется несколько багов:
1. неиспользуемая переменная task в 6-й строке;
2. у класса Response нет метода toEqual в строке 21;
3. неопределенная переменная response в строке 21.

Предположу, что «.toEqual(response.json())» должно быть перенесено на строку ниже + «response» должно быть заменено на «task».

UPD.
Ну и не забывайте, что fetch возвращает не результат, а Promise<Response<any>>, т.е. в expect попадет экземпляр Promise, а не Response и тем более не ответа сервера в JSON.
Тоже самое касается и переменной task.

Переменную «baseUrl» лучше создать в одном месте, а во все другие места где она нужна просто её импортировать.


Часовой пояс GMT +3, время: 12:42.