Могу ли я редактировать и просматривать глобальную переменную в коде с помощью контрольного примера - PullRequest
0 голосов
/ 12 сентября 2018

Я использую Jest для написания тестового примера. Файл JavaScript, который мне нужно протестировать, содержит некоторые глобальные переменные, и я хочу получить и установить значение этих глобальных переменных. Я попытался экспортировать глобальные переменные и использовать непосредственно в test.js. Однако это не работает. Есть простой код:

simple.js:

    var someGlobalVariable = '';
    //Basic Function with no return type
    function firstFunction() {
        someGlobalVariable = 'hello';
    }
    //Function which returns String
    function secondFunction() {
        //firstFunction();
        console.log(someGlobalVariable);
        return someGlobalVariable;
    }

    module.exports.firstFunction= firstFunction;
    module.exports.secondFunction = secondFunction;
    module.exports.someGlobalVariable = someGlobalVariable;

simple.test.js: const jstester = require ('./Test');

    test('secondFunction', ()=>{
        //jstester.firstFunction();
        jstester.someGlobalVariable = 'world';
        console.log(jstester.someGlobalVariable);
        expect(jstester.secondFunction()).toMatch('world');
    });

Результат:

    FAIL  ./Test.test.js
    ✕ secondFunction (19ms)

    ● secondFunction

    expect(received).toMatch(expected)

    Expected value to match:
        "world"
    Received:
        ""

   5 |     jstester.someGlobalVariable = 'world';
   6 |     console.log(jstester.someGlobalVariable);
>  7 |     expect(jstester.secondFunction()).toMatch('world');
     |                                       ^
   8 | });
   9 |
  10 |

  at Object.toMatch (Test.test.js:7:39)

  console.log Test.test.js:6
      world

  console.log Test.js:12

  Test Suites: 1 failed, 1 total
  Tests:       1 failed, 1 total
  Snapshots:   0 total
  Time:        0.961s, estimated 1s
  Ran all test suites.

someGlobalVariable в simple.js по-прежнему равен ". Но я хочу, чтобы simple.test.js изменил значение на" world ".

Есть ли способ изменить значение напрямую? Или я должен добавить функцию set и get в simple.js?

1 Ответ

0 голосов
/ 13 сентября 2018

Я не уверен в вашем случае использования, но у меня есть несколько предложений:

  1. Измените someGlobalVariable на объект и измените его напрямую. Решение будет что-то вроде:

simple.js:

var someGlobalVariable = {
  value: "hello"
};
//Basic Function with no return type
function firstFunction() {
  someGlobalVariable.value = "hello";
}
//Function which returns String
function secondFunction() {
  //firstFunction();
  console.log(someGlobalVariable.value);
  return someGlobalVariable.value;
}

module.exports.firstFunction = firstFunction;
module.exports.secondFunction = secondFunction;
module.exports.someGlobalVariable = someGlobalVariable;

simple.test.js:

const jstester = require("./simple");
test("secondFunction", () => {
  //jstester.firstFunction();
  jstester.someGlobalVariable.value = "world";
  console.log(jstester.someGlobalVariable.value);
  expect(jstester.secondFunction()).toMatch("world");
});

Это работает, потому что вы не меняете ссылку на тему, вы просто меняете свойство, в то время как базовая ссылка такая же.

  1. Получить secondFunction переменную с исходным значением someGlobalVariable в качестве значения по умолчанию:

    function secondFunction (dependency = someGlobalVariable) { // firstFunction (); console.log (someGlobalVariable); return someGlobalVariable; }

Таким образом, вы можете передать произвольные значения в secondFunction и проверить ваши конкретные случаи. Однако это не изменяет глобальную переменную внутри simple.js.

Надеюсь, это помощники! Ура :) 1033 *

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