Жасмин тест, высмеивающий функцию, вызывая spyOn - PullRequest
0 голосов
/ 24 января 2019

Я довольно новичок в тесте Жасмин.

Позвольте мне сказать, что у меня есть файл sample.js:

(function() {

    function myFunction() {

        do some thing and then make a call to MyOtherFunciton
    }

    myOtherFunciton(p1, p2, p3) {
        //do some stuff in here 
    }
    module.exports = {
      myOtherFunciton,
      myFunction
    }
})();

Теперь у меня есть этот тест Жасмин делает следующее

   const mySampleFile = require(./sample.js);

   spyOn(mySampleFile, "myOtherFunciton").and.callFack(()=>{
   });
   mySampleFile.myFunction();
   expect(mySampleFile.myOtherFunciton).toHaveBeenCalled();

Проблема, с которой я сталкиваюсь, заключается в том, что она вызывает реальную функцию myOtherFunciton, но не мошенническую. Почему это так?

1 Ответ

0 голосов
/ 24 января 2019

Это проблема с областью действия функции, с которой вы сталкиваетесь.Функция myOtherFunciton(), вызываемая из myFunction(), отличается от mySampleFile.myOtherFunciton(), как вы выяснили.Для исправления потребуется небольшой рефакторинг вашего исходного кода (вам не нравится, когда тестирование выставляет такие вещи?).Ниже я добавил несколько консольных журналов, чтобы было ясно, куда движется контекст выполнения во время тестирования.

Рекомендуемый рефакторинг:

(function() {

    exports.myFunction = function() {
        // do some thing and then make a call to MyOtherFunciton
        console.log('inside myFunction');
        exports.myOtherFunciton('a', 'b', 'c'); // scoped to exports, now can be mocked
        // myOtherFunciton('a', 'b', 'c'); // <-- don't call it like this: scoped within IIFE
    }

    exports.myOtherFunciton = function(p1, p2, p3) {
        console.log('inside original myOtherFunciton');
        //do some stuff in here 
    }
    // module.exports = {
    //   myOtherFunciton,
    //   myFunction
    // }
})();

Вот рабочий StackBlitz , показывающийтест сейчас проходит.Нажмите на «консоль» под тестовым окном Жасмин, чтобы увидеть результат.

Надеюсь, это поможет.

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