2012-11-01 5 views
5

나는이 같은 제출 이벤트에 부착 된 핸들러가있는 형태 :재스민 jQuery를 함께 양식 제출 핸들러를 테스트

$('#myForm').bind('submit', $.proxy(this, 'form_onSubmit')); 

내가 보장하기 위해 코드 줄을 테스트하는 방법을 작동하지 않을 수 있습니다 양식이 제출되면 올바른 이벤트 핸들러를 사용합니다.

describe('Submitting the form', function() { 
    it ('Uses the correct event handler', function() { 
     spyOn(myConstructor, 'form_onSubmit'); 
     $('#myForm').trigger('submit'); 
     expect(myConstructor.form_onSubmit).toHaveBeenCalled(); 
    }); 
}); 

나는 또한 사용하려고했습니다 : : 나는 수 없었던으로

expect($('#myForm')).toHandleWith('submit', myConstructor.form_onSubmit); 

을하지만 페이지가 무한 루프에 자신을 제출 유지 예를 들어,이 작동하지 않습니다 이 어디서나 작동하는 예제를 찾으려면 Jasmine이 "undefined의 submit '속성을 읽을 수 없음"이라는 오류를 던지고있는 것입니다. 여기서 undefined는 this.actual.data ("events")입니다).

아무도 도와 줄 수 있습니까? 나는 몇 시간 동안 그것을 해왔다! 감사.

+0

흠 ...'triggerHandler가 ('제출') 하는가 '또한 페이지가 다시 게시 원인

<form class="js-game-form" action="javascript:void(0)"> </form> 

? –

+0

그 재발 방지 (이전에는 사용하지 않았지만 - 감사합니다!)하지만 불행히도 Jasmine은 myConstructor.form_onSubmit이 호출되지 않는다고 생각하므로 테스트가 여전히 실패합니다. (내가 코드에 중단 점을 넣었더라도) – user399050

답변

6

Jasmine jQuery를 사용하여 이벤트를 감시하고 있습니다.

https://github.com/velesin/jasmine-jquery#event-spies

또한 나는 고정을 사용하여 양식을 조롱하고있다.

양식 자체 (양식에서)에서 양식 제출이 발생하지 않도록 조치를 "javascript : void (0)"로 설정했습니다. 테스트

describe("#submitForm", function(){ 
    it("should submit the form when you press one of the update buttons", function(){ 
     var spyEvent = spyOnEvent(formSelector, 'submit'); 
     $(updateButtonSelector).trigger("click"); 
     expect(spyEvent).toHaveBeenTriggered(); 
    }); 
}); 
+1

이것을 공유해 주셔서 감사합니다. 특히 여기서는 아무것도하지 않으려는 양식의 동작을 설정하는 것이 중요합니다! – RSeidelsohn

+1

''javascript : void (0) ''최고의 팁. 감사. – Hugh