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?
Đ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. –