2011-09-13 31 views
6

Tôi đang sử dụng FactoryGirl và Rspec để kiểm tra. Mô hình thiết lập khóa ngoài sau init nếu nó là không. Do đó nó sử dụng dữ liệu của một hiệp hội khác. Nhưng làm thế nào tôi có thể kiểm tra nó? Thông thường tôi sẽ sử dụng một nhà máy để tạo ra đối tượng này và sử dụng một stub_chain cho "self.user.main_address.country_id". Nhưng với việc tạo ra đối tượng này, sau khi khởi tạo sẽ được gọi. Tôi không có cơ hội để khai thác nó.Làm thế nào để kiểm tra after_initialize gọi lại của một mô hình đường ray?

after_initialize do 
    if self.country_id.nil? 
    self.country_id = self.user.main_address.country_id || Country.first.id 
    end 
end 

Bất kỳ ý tưởng nào?

Trả lời

8

Tốt nhất là bạn nên kiểm tra hành vi thay vì triển khai. Kiểm tra khóa ngoài được đặt thay vì kiểm tra xem phương thức có được gọi hay không.

Mặc dù, nếu bạn muốn thử nghiệm gọi lại after_initialize đây là cách hoạt động.

obj = Model.allocate 
obj.should_receive(:method_here) 
obj.send(:initialize) 

Allocate đặt đối tượng vào bộ nhớ nhưng không gọi initialize. Sau khi bạn đặt kỳ vọng, sau đó bạn có thể gọi khởi tạo và bắt cuộc gọi phương thức.

5

Phương pháp của Orlando hoạt động và đây là phương pháp khác mà tôi muốn thêm. (Sử dụng cú pháp mới 'kỳ vọng')

expect_any_instance_of(Model).to receive(:method_here) 
Model.new 
Các vấn đề liên quan