2013-04-11 40 views
6

Gần đây tôi đã thêm một e.preventDefault() vào một trong các chức năng javascript của tôi và nó đã phá vỡ thông số hoa nhài của tôi. Tôi đã thử spyOn(e, 'preventDefault').andReturn(true); nhưng tôi nhận được e là lỗi không xác định. Làm thế nào để còn sơ khai e.preventDefault()?Stubbing e.preventDefault() trong thử nghiệm hoa nhài

showTopic: function(e) { 
    e.preventDefault(); 
    midParent.prototype.showTopic.call(this, this.model, popup); 
    this.topic.render(); 
} 

it("calls the parent", function() { 
    var parentSpy = spyOn(midParent.prototype, "showTopic"); 
    this.view.topic = { 
     render: function() {} 
    }; 
    this.view.showTopic(); 
    expect(parentSpy).toHaveBeenCalled(); 
}); 
+0

Giải pháp có hoạt động không? –

+0

@Asad no, đó là lý do tại sao tôi xóa nó – Huy

+0

'spyOn (e, 'preventDefault')' là ok nhưng bạn không chuyển 'e' vào' showTopic() 'trong' it() '. Đó có phải là vấn đề? – zbynour

Trả lời

14

Một cách khác để tạo ra đối tượng giả (với gián điệp mà bạn cần) là sử dụng jasmine.createSpyObj() . Mảng chứa tên gián điệp phải được chuyển thành tham số thứ hai.

var e = jasmine.createSpyObj('e', [ 'preventDefault' ]); 
this.view.showTopic(e); 
expect(e.preventDefault).toHaveBeenCalled(); 
1

Bạn phải vượt qua một đối tượng với một preventDefault lĩnh vực giữ gián điệp của bạn:

var event = {preventDefault: jasmine.createSpy()} 
this.view.showTopic(event); 
expect(event.preventDefault).toHaveBeenCalled 
0

Điều này rất giống với cách tiếp cận ở trên cùng. Tôi vừa chế giễu sự kiện và thông qua preventDefault với một điệp viên tội lỗi. Sự khác biệt là tôi đã phải xác định loại đó là một nhấp chuột vào thử nghiệm của tôi.

var e = { 
     type: 'click', 
     preventDefault: sinon.spy() 
     }; 
Các vấn đề liên quan