Sinon JS“试图包装已经包装好的Ajax”

当我运行我的testing时,我得到了上述错误信息。 下面是我的代码(我使用Backbone JS和Jasmine进行testing)。 有谁知道为什么发生这种情况?

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

每次testing后都必须删除间谍。 看看来自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); } } 

所以在你的茉莉花testing应该是这样的:

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

你一开始需要的是:

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

然后调用类似于:

 windowSpy = sandbox.spy windowService, 'scroll' 
  • 请注意,我使用咖啡脚本。