Как издеваться над константой, которая создается вне функции? - PullRequest
2 голосов
/ 26 апреля 2019

У меня есть константа, которая создается вне функции, и я хочу провести модульное тестирование этой функции.Но я не хочу обновлять результаты моего модульного теста каждый раз, когда я обновляю эту константу.Есть ли способ смоделировать эту константу и «сказать функции» использовать смоделированную константу вместо фактической константы?Я бы предпочел не создавать новую функцию, которая возвращает эту константу (что я нашел возможным).

utils.js

const data = [1, 2, 3]

const functionToTest = () => {
    if (data.includes(2)) {
        return true
    }

    return false
}

test.js

describe('testing functionToTest', () => {
    const dataReplacement = [3, 4, 5]

    tellFunctionToTest('hey, use dataReplacement instead of data')
})

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

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Один из подходов - экспортировать data и использовать экспорт в functionToTest:

code.js

exports.data = [1, 2, 3];

exports.functionToTest = () => exports.data.includes(2);

code.test.js

const assert = require('assert');
const code = require('./code');

describe('functionToTest', () => {
  it('should work', () => {
    code.data = [3, 4, 5];
    assert(code.functionToTest() === false);  // Success!
  });
});
0 голосов
/ 26 апреля 2019

Вы можете смоделировать его, присвоив значение переменной global:

test('testing functionToTest', () => {
    global.data = [3, 4, 5];
   // continue the test
})

Редактировать

Только что создал простой пример, чтобы показать, как вы можете объявить глобальные переменные: https://codesandbox.io/s/9q1x757my?fontsize=14

...