Макет const, определенный в функции, используя Jest - PullRequest
0 голосов
/ 07 января 2020

Мой проект - приложение React, использующее Jest.

Мне нужно протестировать функцию, в которой я определяю const. Const устанавливается с использованием импортированной службы.

Я хочу смоделировать const для проверки оператора if-else

Вот файл, который я хочу проверить:

import { authenticationService } from "../_services/authentication.service";

export const handleHeaders = (isFile = false) => {
    const currentUser = authenticationService.currentUserValue;
    if (currentUser && currentUser.access_token) {
        return isFile
            ? {
                Authorization: `Bearer ${currentUser.access_token}`,
                "Content-Disposition": "multipart/form-data"
            }
            : {
                Authorization: `Bearer ${currentUser.access_token}`,
                "Content-Type": "application/json"
            };
    } else {
        return { "Content-Type": "application/json" };
    }
};

Я попытался смоделировать аутентификацию службы аутентификации, как показано ниже

import { handleHeaders } from "../handle-headers";

jest.mock("../../_services/authentication.service", () => ({
  currentUserValue: { access_token: "some token" }
}));

describe("handleHeaders", () => {
  it("should return headers with Authorization if 
currentUser.access_token is defined", () => {
    expect(handleHeaders()).toStrictEqual({
      Authorization: "Bearer some token",
      "Content-Type": "application/json"
    });
  });
});

Но я получил TypeError: Невозможно прочитать свойство 'currentUserValue' из неопределенного, когда функция пытается определить const currentUser.

Спасибо за вашу помощь

1 Ответ

1 голос
/ 07 января 2020

Вы можете использовать макеты ES6: https://jestjs.io/docs/en/es6-class-mocks

Синтаксис:

jest.mock('../_services/authentication.service', () => ({
    __esModule: true,
    authenticationService: {
        currentUserValue: { access_token: 'some token' }
    }
}))

Однако не забудьте вызвать authenticationService.mockClear() в вашем блоке beforeEach для Сбросьте это между тестами.

Редактировать: Поскольку аутентификация не является экспортом по умолчанию, мы должны смоделировать это следующим образом.

...