2012-06-19 32 views
8

Tôi đang cố gắng để gỡ lỗi một gián điệp trên jQuery.post mà không được bắn, như vậy là một kiểm tra sanity, tôi đã cố gắngTại sao một điệp viên Jasmine không cho rằng nó được gọi là mặc dù nó trả về giá trị và trả về?

spyOn(this.viewModel.requests, 'submitRequest').andReturn('fooz'); 

var ret = this.viewModel.requests.submitRequest(); 
expect(ret).toEqual('foo'); 

expect(this.viewModel.requests.submitRequest).toHaveBeenCalled(); 

này không thành công với

Dự kiến ​​'Fooz' để bình đẳng 'foo '.

Nhưng khi tôi thay đổi 'fooz'-'foo' trong đối số để andReturn, các thử nghiệm không thành công với

gián điệp Dự kiến ​​vào submitRequest đã được gọi.

Điệp viên trả về giá trị đóng hộp, vậy tại sao toHaveBeenCalled không thành công?

+0

Bạn đang sử dụng phiên bản Jasmine nào? – Dancrumb

+0

@Dancrumb 1.2.0-rc3 –

Trả lời

1

Tôi biết điều này không phải là giải pháp, nhưng có bạn đã cố gắng

var submitSpy = spyOn(this.viewModel.requests, 'submitRequest').andReturn('foo'); 

var ret = this.viewModel.requests.submitRequest(); 
expect(ret).toEqual('foo'); 

expect(submitSpy).toHaveBeenCalled(); 

Bởi vì đôi khi làm việc này một cách nhất quán

+0

Cảm ơn bạn đã gợi ý, nhưng thử nghiệm này cũng không thành công: "Dự kiến ​​gián điệp trên submitRequest đã được gọi." –

+0

@GregBacon bạn đã thử làm một console.log (submitSpy)? Điều gì làm bạn nhận được? Điều này thực sự lạ, bạn đang sử dụng framework nào? –

1

Mã của bạn cần phải làm việc nhiều hơn nữa. Tôi đã thử nghiệm nó trên các ví dụ hoa nhài độc lập:

it("tells the current song if the user has made it a favorite", function() { 
    spyOn(song, 'persistFavoriteStatus').andReturn('foo'); 
    var ret = song.persistFavoriteStatus(); 
    expect(ret).toEqual('foo'); 

    expect(song.persistFavoriteStatus).toHaveBeenCalled(); 
}); 

ruột của tôi nói với tôi rằng vấn đề bạn đang gặp phải đã làm với Phạm vi của trước của Jasmine/sau cuộc gọi - Tôi đã chạy vào trường hợp bực bội như vậy bản thân mình . Khi bắt đầu thử nghiệm, tôi sẽ kiểm tra để đảm bảo môi trường như bạn mong đợi (ví dụ, các điệp viên được đặt lại chẳng hạn).

Các vấn đề liên quan