2011-09-19 28 views
5

Tôi có hai mô hình, Foo và Bar. Foo có một phương thức gọi là ask_bar_to_do_something, được gọi sau khi một cá thể của Foo được lưu lại. Phương thức này không thay đổi trạng thái của cá thể Foo này.Làm thế nào để kiểm tra nếu một phương pháp được gọi trên một đối tượng - Rails RSpec

Tôi đang nghĩ đến việc tạo phương thức này để trả về 1 và tạo khối lambda tạo đối tượng Foo và kiểm tra giá trị trả về. Có cách nào tốt hơn để làm điều này?

Cảm ơn bạn.

Trả lời

13

Tại sao không thử đối tượng và mong đợi cuộc gọi phương thức?

class Foo < ActiveRecord::Base 
    after_create :ask_bar_to_do_something 

    def ask_bar_to_do_something 
    #blah blah blah 
    end 
end 

Nếu bạn đang sử dụng nhà máy để tạo ra các đối tượng

Foo.any_instance.should_receive(:ask_bar_to_do_something) 
Factory(:foo) 

khác

foo = Foo.new(:attr1 => 'value1', :attr2 => 'value2') 
foo.should_receive(:ask_bar_to_do_something) 
foo.save 
+0

Thanks a lot, dexter. Đó chính là điều tôi đang tìm kiếm. – AdamNYC

+0

Đây có phải là cú pháp 'nên' không? Bất cứ ai có thể chia sẻ cú pháp 'mong đợi' nếu có sẵn? – ianstarz

+3

@ianstarz 'expect_any_instance_of (Foo) .to receive (: ask_bar_do_do_something)' – rxgx

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