Jest - макет постоянного свойства из модуля для конкретного теста - PullRequest
3 голосов
/ 13 марта 2019

Итак, я пытаюсь сделать что-то, что на первый взгляд должно быть очень простым ...

У меня есть некоторые константы, определенные в: ` //constants.js

module.exports = {
 MY_CONSTANT: "TEST"
}

` У меня есть файл, который я пытаюсь проверить, который имеет такой ответ:

`

//file to test
//...

if(CONSTANTS.MY_CONSTANT === "TEST")
{...}
...

`

И у меня есть такой тест: `

//test


 it("Should do something when MY_CONSTANT === "TEST, () => {
    //This is fine as it is exported as TEST
    })


 it("Should do something else when MY_CONSTANT !== "TEST, () => {
    //This seems annoyingly difficult to get working...
    })

`

Я пробовал это - Не повезло, оно не меняет фактическое значение

Я попытался изменить постоянный экспорт, чтобы вместо этого экспортировать объект (это не сработало)

Я попытался добавить jest.mock (..) для констант в моем тестовом файле и выполнить немодирование в тестах, которые мне не нужны.

Я попытался добавить jest.doMock (...) в тестовую функцию, мне нужно изменить значение. (вместе с jest.resetModules и другим требуется)

Я пытался добавить jest.doMock (...) в тесты beforeEach (вместе с jest.resetModules и другим требованием)

Я действительно в растерянности ... буквально все, что я хочу сделать, это изменить значение свойства перед запуском теста ?

Обновление Итак, я сделал несколько предложений:

Теперь у меня есть папка mocks рядом с папкой констант Он содержит файл с именем, совпадающим с файлом фактических констант, и пользовательский экспорт

Затем я добавил jest.mock("../constants); внутри теста.

Затем я также добавил const funcImTesting = require("../../file").testFunction в тест.

Тем не менее константа остается неизменной, и тест не пройден

1 Ответ

0 голосов
/ 13 марта 2019

Чтобы макетировать только для одного теста:

jest.mock('./constants.js', () => ({
  MY_CONSTANT: 'something fake'
}));

https://jestjs.io/docs/en/manual-mocks


Чтобы обеспечить макет для каждого теста:

  1. создать__mocks__ каталог adiacent к модулю, который вы хотите смоделировать
  2. обеспечение реализации
  3. вызов jest.mock('./moduleName') в вашем тесте

https://jestjs.io/docs/en/manual-mocks#mocking-user-modules

...