Sinon JS “Attempted to wrap ajax which is already wrapped”

前端 未结 2 886
挽巷
挽巷 2021-01-31 13:23

I got the above error message when I ran my test. Below is my code (I\'m using Backbone JS and Jasmine for testing). Does anyone know why this happens?

$(functio         


        
相关标签:
2条回答
  • 2021-01-31 14:03

    You have to remove the spy after every test. Take a look at the example from the sinon docs:

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

    So in your jasmine test should look like this:

    $(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();
         }
      })
    }
    
    0 讨论(0)
  • 2021-01-31 14:16

    What you need in the very beginning is:

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

    Then call something like:

    windowSpy = sandbox.spy windowService, 'scroll'
    
    • Please notice that I use coffee script.
    0 讨论(0)
提交回复
热议问题