Подтвердить что ты не робот

Метод Жасмин-Шпионов.

Я читал документацию Jasmine, и я изо всех сил пытался понять, что на самом деле делает метод Spies .and.stub. Английский не мой родной язык, поэтому я даже не знаю, что на самом деле означает слово "заглушка", и на моем языке нет перевода.

В документации говорится:

Когда стратегия вызова используется для шпиона, исходное поведение stubbing может быть возвращено в любое время с помощью и .stub.

describe("A spy", function() {  

var foo, bar = null;

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

    spyOn(foo, 'setBar').and.callThrough();
  });

  it("can call through and then stub in the same spec", function() {
    foo.setBar(123);
    expect(bar).toEqual(123);

    foo.setBar.and.stub();
    bar = null;

    foo.setBar(123);
    expect(bar).toBe(null);
  });
});

Что делает and.stub действительно и как оно полезно?

4b9b3361

Ответ 1

В связи с этим вы можете посмотреть на wikipedia: http://en.wikipedia.org/wiki/Test_stub

В двух словах это "поддельный" объект, который вы можете контролировать, который заменяет "настоящий" объект в вашем коде.

Для функции я понимаю, что and.stub() удаляет эффект and.callThrough() для шпиона.

Когда вы вызываете and.callThrough, шпион действует как прокси-сервер, вызывая реальную функцию, но проходя через объект-шпион, позволяя добавлять тесты, такие как ожидание.

Когда вы вызываете and.stub, или если вы никогда не звоните and.callThrough, шпион не будет вызывать реальную функцию. Это действительно полезно, когда вы не хотите проверять поведение объекта, но убедитесь, что он был вызван. Помогая вам сохранить ваш тест по-настоящему унитарным.

Ответ 2

Чтобы выполнить предыдущий ответ:

В самом деле, это не ясно из документа, но это очень ясно в исходном коде:

https://github.com/jasmine/jasmine/blob/4be20794827a63ca5295848c58ffc478624ee4dc/src/core/SpyStrategy.js

plan = function() {};

- > вызываемая функция пуста

this.callThrough = function() {
  plan = originalFn;

- > вызываемая функция является исходной функцией

this.stub = function(fn) {
  plan = function() {};

- > вызываемая функция пуста (снова)