2008-10-28 22 views
26

Trong bộ điều khiển Rails của tôi, tôi đang tạo nhiều phiên bản của cùng một lớp mô hình. Tôi muốn thêm một số kỳ vọng RSpec để tôi có thể kiểm tra rằng nó đang tạo đúng số với các tham số chính xác. Vì vậy, đây là những gì tôi có trong thông số kỹ thuật của tôi:Làm cách nào để tôi có thể thêm nhiều kỳ vọng vào một đối tượng bằng RSpec?

 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => @user.id, :position_id => 1, :is_leader => true) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "2222", :position_id => 2) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "3333", :position_id => 3) 
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "4444", :position_id => 4) 

Điều này gây ra vấn đề vì lớp Bandmate chỉ có thể có 1 "kỳ vọng" được đặt trên đó. Vì vậy, khi tôi chạy ví dụ này, tôi nhận được lỗi sau:

 
Spec::Mocks::MockExpectationError in 'BandsController should create all the bandmates when created' 
Mock 'Class' expected :create with ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) but received it with ({:band_id=>1014, :user_id=>"2222", :position_id=>"2"}) 

Đó là thông số chính xác cho lệnh gọi thứ hai để tạo, nhưng RSpec đang thử nghiệm với thông số sai.

Có ai biết cách tôi có thể thiết lập các kỳ vọng của tôi để cho phép nhiều cuộc gọi khác nhau không?

+0

Điều đó sẽ hiệu quả. Bạn đang sử dụng phiên bản RSpec nào? Hãy thử gọi các phương thức được sắp xếp theo thứ tự từ thông số kỹ thuật (Bandmate.create (...: user_id => @ user.id ...); Bandmate.create (...: user_id => "2222" ...); ...) và xem nó có hoạt động không. –

Trả lời

34

Nhiều kỳ vọng không phải là vấn đề gì cả. Những gì bạn đang chạy vào được đặt hàng các vấn đề, cho args cụ thể của bạn về những kỳ vọng không theo thứ tự. Kiểm tra this page để biết chi tiết về các yêu cầu đặt hàng.

Câu chuyện ngắn gọn là bạn nên thêm .ordered vào cuối mỗi kỳ vọng của mình.

+0

Huh, giờ nó đang hoạt động ngay cả khi không có. Tôi đoán là tôi có lỗi trong mã của mình và đổ lỗi cho nó trên RSpec. Cảm ơn mẹo! Liên kết – Micah

+0

là 404 trên github – xxjjnn

+0

Trang cũ có 404. Tôi tin rằng đây là trang hiện tại: http://rspec.info/documentation/3.3/rspec-mocks/#Ordering – AmitA

-1

Mock Receive Counts

my_mock.should_receive (: sym) .Sau
my_mock.should_receive (: sym) .twice
my_mock.should_receive (: sym) .exactly (n) .times
my_mock.should_receive (: sym) .at_least (: một lần)
my_mock.should_receive (: sym) .at_least (: hai lần)
my_mock.should_receive (: sym) .at_least (n) .times
my_mock.should_receive (: sym) .at_most (: once)
my_m ock.should_receive (: sym) .at_most (: hai lần)
my_mock.should_receive (: sym) .at_most (n) .times
my_mock.should_receive (: sym) .any_number_of_times

trình cho rspec 2.5 quá.

+14

không bao gồm các đối số khác nhau cần được nhận cho mỗi cuộc gọi. – sevenseacat

+1

làm thế nào để bạn làm điều đó với args khác nhau? –

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