2012-01-11 36 views
58

當我運行我的測試時,我收到了上述錯誤消息。下面是我的代碼(我使用Backbone JS和Jasmine進行測試)。有誰知道爲什麼發生這種情況?Sinon JS「試圖包裝已包裝的AJAX」

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

回答

88

您必須在每次測試後刪除間諜。看看的例子從興農文檔:

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

在我的考驗之一,我有一個afterEach塊太多,但它並沒有解決問題。難道是因爲我把afterEeach放在所有的測試之後,而不是beforeEach之後? – 2012-01-11 20:26:12

+0

我這麼認爲,導致'beforeEach'和'afterEach'函數調用就像你的測試一樣。因此,在所有測試之後調用'afterEach'都不會起作用。 – 2012-01-11 20:30:33

+0

process.exit.restore(); ...不錯 – danday74 2017-04-06 04:07:31

6

你在一開始就需要的是:

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

    afterEach -> 
    sandbox.restore() 

然後調用類似於:

windowSpy = sandbox.spy windowService, 'scroll' 
  • 請注意,我使用咖啡腳本。
+5

除非開放式或未指定,答案應該是問題所在的語言。 – 2017-01-09 08:35:10

+0

@JustinJohnson我不認爲JS和咖啡腳本之間有任何誤解。順便說一句,他們是同一種語言。 – Winters 2017-01-10 04:39:00

+4

你的經驗和提問者的經驗不一樣,你不應該假設他們是。 CoffeeScript爲JavaScript添加了語法糖(這裏你使用了),所以它們不是*同一個東西。 – 2017-01-11 05:04:19