Sinon JS "Попытка обернуть уже завернутый ajax" - PullRequest
62 голосов
/ 12 января 2012

При запуске теста я получил указанное выше сообщение об ошибке. Ниже приведен мой код (я использую Backbone JS и Jasmine для тестирования). Кто-нибудь знает, почему это происходит?

$(function() {
  describe("Category", function() {
     beforeEach(function() {
      category = new Category;
      sinon.spy(jQuery, "ajax");
     }

     it("should fetch notes", function() {
      category.set({code: 123});
      category.fetchNotes();
      expect(category.trigger).toHaveBeenCalled();
     }
  })
}

Ответы [ 2 ]

94 голосов
/ 12 января 2012

Вы должны удалить шпиона после каждого теста. Взгляните на пример из документации по sinon:

{
    setUp: function () {
        sinon.spy(jQuery, "ajax");
    },

    tearDown: function () {
        jQuery.ajax.restore(); // Unwraps the spy
    },

    "test should inspect jQuery.getJSON's usage of jQuery.ajax": function () {
        jQuery.getJSON("/some/resource");

        assert(jQuery.ajax.calledOnce);
        assertEquals("/some/resource", jQuery.ajax.getCall(0).args[0].url);
        assertEquals("json", jQuery.ajax.getCall(0).args[0].dataType);
    }
}

Так что в вашем тесте жасмин должен выглядеть так:

$(function() {
  describe("Category", function() {
     beforeEach(function() {
      category = new Category;
      sinon.spy(jQuery, "ajax");
     }

     afterEach(function () {
        jQuery.ajax.restore();
     });

     it("should fetch notes", function() {
      category.set({code: 123});
      category.fetchNotes();
      expect(category.trigger).toHaveBeenCalled();
     }
  })
}
8 голосов
/ 21 октября 2015

Что вам нужно в самом начале:

  before ->
    sandbox = sinon.sandbox.create()

  afterEach ->
    sandbox.restore()

Затем вызовите что-то вроде:

windowSpy = sandbox.spy windowService, 'scroll'
  • Обратите внимание, что я использую сценарий кофе.
...