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'
- 请注意,我使用咖啡脚本。