2012-01-11 24 views
58

जब मैंने अपना परीक्षण चलाया तो मुझे उपरोक्त त्रुटि संदेश मिला। नीचे मेरा कोड है (मैं परीक्षण के लिए बैकबोन जेएस और जैस्मीन का उपयोग कर रहा हूं)। क्या किसी को पता है यह क्यों होता है?सीनॉन जेएस "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

मेरे परीक्षणों में से एक में, मेरे पास प्रत्येक ब्लॉक भी था लेकिन इसने समस्या को हल नहीं किया। क्या ऐसा हो सकता है क्योंकि मैंने पहले के बाद ठीक से बजाए सभी परीक्षणों के बाद बाद में रखा था? –

+0

मुझे ऐसा लगता है, 'पहले से पहले' और 'प्रत्येक के बाद' आपके परीक्षण के रूप में कार्य कॉल होते हैं। इसलिए आपके सभी परीक्षणों के बाद 'बाद में' को कॉल करना कोई प्रभाव नहीं पड़ेगा। –

+0

process.exit.restore(); ... अच्छा – danday74

6

क्या आप बहुत शुरुआत में की जरूरत है:

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

    afterEach -> 
    sandbox.restore() 

फिर कुछ कॉल करें:

windowSpy = sandbox.spy windowService, 'scroll' 
  • कृपया ध्यान दें कि मैं कॉफी स्क्रिप्ट का उपयोग करता हूं।
+5

जब तक खुला या अनिर्दिष्ट न हो, तो जवाब उस भाषा में होना चाहिए जिसमें प्रश्न है। –

+0

@ जस्टिन जॉनसन मुझे नहीं लगता कि जेएस और कॉफी स्क्रिप्ट के बीच कोई गलतफहमी है। बीटीडब्ल्यू, वे एक ही भाषा हैं। – Winters

+4

आपका अनुभव और प्रश्नकर्ता का वही नहीं है, और आपको यह नहीं मानना ​​चाहिए कि वे हैं। कॉफीस्क्रिप्ट जावास्क्रिप्ट को सिंटैक्टिक चीनी जोड़ता है (जिसे आपने यहां इस्तेमाल किया), इसलिए वे * एक ही चीज़ नहीं हैं। –

संबंधित मुद्दे

 संबंधित मुद्दे