Почему spyOn "останавливает все выполнение функции" в Jasmine (запрашивая разъяснения по документации Jasmine 2.2 для шпионов)

В документации Jasmine 2.2 я не могу понять последнюю спецификацию, которая демонстрирует основное использование шпионов.

в beforeEach() раздел мы устанавливаем bar = nullтогда мы следим за foo.setBar а потом мы позвоним foo.setBar дважды. Я не могу понять почему bar === null в последнем спец. Не должно ли это быть bar === 456 прежде чем шпион будет снесен для спецификации?

Вот пример:

describe("About a Spy", function(){
  var foo, bar = null;

  beforeEach(function() {
    foo = {
      setBar: function(value) {
        bar = value;
      }
    };

    spyOn(foo, "setBar"); // we spy

    foo.setBar(123); // shouldn't bar === 123 here?
    foo.setBar(456, 'another param'); // and bar === 456 here?
  });



  it("stops all execution on a function", function() {
    // What, why, how?
    expect(bar).toBeNull();

    //I expected this to be the case, but it's not.
    //expect(bar).toBe(456);
  });
});

Я, должно быть, неправильно понимаю, как beforeEach создает и разрушает область видимости переменных или, возможно, есть шаг, где переменные внутри describe раздел получить сброс? Или их никогда не трогали, потому что мы использовали только шпионскую функцию, а не реальную функцию?

Было бы очень полезно, если бы вы могли объяснить, что именно происходит с переменной bar в этом иске спецификации, так что я мог понять, почему его значение остается нулевым в последней спецификации.

Спасибо!

1 ответ

Решение

Если вы посмотрите внимательно, вы можете понять, что spyOn заменяет исходную функцию шпионом, который перехватывает вызовы функций и отслеживает много потенциально полезной информации о них. Проблема, с которой мы сталкиваемся выше, состоит в том, что, как только мы заменили исходную функцию, мы потеряли ее возможности. Мы можем исправить это с помощью andCallThrough. Если вы вызываете andCallThrough() после вызова spyOn, шпион затем передает любые вызовы ему до исходной функции

http://www.joezimjs.com/javascript/javascript-unit-testing-with-jasmine-part-2/

Другие вопросы по тегам