2012-01-11 1 views
58

테스트를 통과했을 때 위의 오류 메시지가 나타납니다. 아래 코드는 (Backbone JS와 Jasmine을 사용하고 있습니다.) 왜 이런 일이 일어나는 지 아는 사람이 있습니까?Sinon JS "이미 포장 된 아약스를 포장하려고했습니다."

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

: a를 sinon 문서에서 예제를 살펴 보자

$(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 블록이 있지만 문제가 해결되지 않았습니다. 전후 검사 대신에 모든 검사를 끝낸 후에 검사를 끝내기 때문일 수 있습니다? –

+0

필자는 이렇게 생각합니다. beforeEach와 afterEach는 테스트와 마찬가지로 함수 호출입니다. 따라서 모든 테스트 후에'afterEach'를 호출해도 아무런 효과가 없습니다. –

+0

process.exit.restore(); ... nice – danday74

6

을 당신이 맨 처음에해야 할 것은 :

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

    afterEach -> 
    sandbox.restore() 

다음과 같이 호출하십시오.

windowSpy = sandbox.spy windowService, 'scroll' 
  • 커피 스크립트를 사용하고 있습니다.
+5

개방형 또는 지정되지 않은 경우가 아니면 질문에있는 언어로 대답해야합니다. –

+0

@JustinJohnson JS와 커피 스크립트간에 오해가 있다고 생각하지 않습니다. BTW, 그들은 같은 언어입니다. – Winters

+4

귀하의 경험과 질문자의 경험은 같지 않으므로 그러한 질문이 있다고 가정하지 마십시오. CoffeeScript는 통사론적인 설탕을 자바 스크립트 (여기에서 사용 했음)에 추가하기 때문에 같은 것이 아닙니다. –

관련 문제