จำลองการโทรไปยังเซิร์ฟเวอร์โดยใช้ดอกมะลิ

ฉันต้องการจำลองการโทร ajax ไปยังเซิร์ฟเวอร์โดยใช้ jasmine และทดสอบ Deferred Object ที่เสร็จสิ้นแล้วและล้มเหลว

ขณะนี้ฉันกำลังทำอยู่จริงจึงพยายามส่งสายจำนวนมากไปยังเซิร์ฟเวอร์

ฉันจะแก้ไขรหัสต่อไปนี้เป็น

mySpy = spyOn(backendController, 'submitForm').andCallThrough(); 
// it makes a real call to the server

mySpy = spyOn(backendController, 'submitForm'); 
// it does not make a real call to the server but I get the following error
// Cannot call method 'done' of undefined

นี่คือโค้ดเกี่ยวกับ doSubmitForm

doSubmitForm: function (backendController) {
  backendController.submitForm(message.val())
        .done(this.onSuccess)
        .fail(this.onError);
});

person Lorraine Bernard    schedule 13.09.2012    source แหล่งที่มา
comment
เพื่อให้สิ่งนี้ใช้งานได้ 'submitForm' ของคุณจะต้องส่งคืนวัตถุที่เลื่อนออกไป jQuery (เช่น jqXHR เป็นต้น)   -  person Karthik    schedule 13.09.2012
comment
@ Karthik ฉันคิดว่าใช่ มีความคิดใด ๆ ที่จะทำมันได้อย่างไร?   -  person Lorraine Bernard    schedule 13.09.2012
comment
คุณอาจใช้ 'andCallFake' และทำให้มันส่งคืนวัตถุที่เลื่อนออกไปด้วย jquery โพสไว้เป็นคำตอบด้านล่างนี้ครับ   -  person Karthik    schedule 14.09.2012


คำตอบ (1)


ในกรณีที่ล้มเหลว ฉันคิดว่าปัญหาเกิดจากการเรียกไม่ส่งคืนวัตถุ jQuery-Deferred

เพื่อตรวจสอบทฤษฎีนี้ คุณอาจลองทำดังนี้:

var tmpDefObj = $.Deferred();

spyOn(backendController, 'submitForm').andCallFake(function() {return tmpDefObj;});
person Karthik    schedule 13.09.2012
comment
ขอบคุณสำหรับข้อเสนอแนะของคุณ มันใช้งานได้ .. จริงๆ แล้วฉันมีปัญหาอื่นที่เกี่ยวข้องกับเรื่องนี้ วิธีทดสอบสิ่งที่ทำเสร็จแล้วและล้มเหลวที่เลื่อนออกไป วัตถุโดยใช้ดอกมะลิ. มีความคิดวิธีการแก้ไขหรือไม่? - person Lorraine Bernard; 14.09.2012
comment
แน่นอน. ฉันจะดูคำถามอื่นของคุณในภายหลังในวันนี้ - person Karthik; 14.09.2012