8

FactoryGirl sẽ không đặt thuộc tính được bảo vệ của tôi user.confirmed. Thực hành tốt nhất ở đây là gì?Đặt thuộc tính được bảo vệ với FactoryGirl

Factory.define :user do |f| 
    f.name "Tim"   # attr_accessible -- this works 
    f.confirmed true  # attr_protected -- doesn't work 
end 

Tôi có thể làm @user.confirmed = true sau khi sử dụng nhà máy của mình, nhưng đó là rất nhiều sự lặp lại qua nhiều thử nghiệm.

Trả lời

10

Sử dụng một móc after_create hoạt động:

Factory.define :user do |f| 
    f.name "Tim" 
    f.after_create do |user| 
    user.confirmed = true 
    user.save 
    end 
end 
+2

Tìm thấy tuyệt vời. Gần đây hơn các phiên bản của cô gái nhà máy đã thay đổi cú pháp thành 'after (: create)'. Xem [hướng dẫn bắt đầu] (https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md) –

3

Bạn sẽ phải chuyển nó vào băm khi bạn tạo người dùng vì FactoryGirl đang bảo vệ nó khỏi chuyển nhượng hàng loạt.

user ||= Factory(:user, :confirmed => true) 
+0

cảm ơn - chỉ cần thử điều này mặc dù và nó không hoạt động – brittohalloran

+2

Làm việc cho tôi trên FactoryGirl 2.1.0. – iwasrobbed

+0

Tôi đang sử dụng 2.3.2, do đó có thể nhưng có vẻ như không thể – brittohalloran

0

phương pháp khác là sử dụng Rails' xây dựng trong vai trò như thế này:

#user.rb 
attr_accessor :confirmed, :as => :factory_girl 

Khi hàng loạt gán chương trình phát sóng FactoryGirl vai trò này, làm cho mẫu này có thể.

Ưu điểm: Giữ nhà máy nhanh chóng, đơn giản và sạch sẽ (ít mã trong callbacks)
Nhược điểm: Bạn đang thay đổi mã số mô hình của bạn cho các bài kiểm tra của bạn :(

Một số gợi ý chưa được kiểm tra để giải quyết Côn .:

  • bạn có thể mở lại lớp ngay trên máy của bạn
  • bạn có thể mở lại các lớp trong một [thử nghiệm | đặc tả] _helper
Các vấn đề liên quan