webentwicklung-frage-antwort-db.com.de

Sinon JS "Versucht, Ajax zu wickeln, der bereits gewickelt ist"

Ich habe die obige Fehlermeldung erhalten, als ich meinen Test ausgeführt habe. Unten ist mein Code (ich benutze Backbone JS und Jasmine zum Testen). Weiß jemand, warum das passiert?

$(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();
     }
  })
}
63
Tri Vuong

Sie müssen den Spion nach jedem Test entfernen. Schauen Sie sich das Beispiel aus den sinon-Dokumenten an:

{
    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);
    }
}

Also in deinem Jasmintest sollte das so aussehen:

$(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();
     }
  })
}
95

Was Sie am Anfang brauchen, ist:

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

  afterEach ->
    sandbox.restore()

Rufen Sie dann so etwas wie:

windowSpy = sandbox.spy windowService, 'scroll'
  • Bitte beachten Sie, dass ich Kaffeeskript verwende.
9
Winters