2013-05-24 8 views
11

Tôi đã (giản thể) nhà máy được xác định như sau:nhà máy cô gái xác nhận tính độc đáo không cho các nhà máy liên

factory :league do 
    acronym 'NBA' 
end 

factory :division do 
    league 
end 

Phòng thuộc về Leagues. Khi tôi xác định nhà máy này, đó là giả định của tôi rằng 1 giải đấu sẽ được tạo ra, và giải đấu đó sẽ được tái sử dụng hơn và hơn nữa để cung cấp cho các đơn vị một giải đấu thực sự.

Thay vào đó, tôi gặp lỗi trong lần gọi thứ 2 là FactoryGirl.create(:division) vì Liên đoàn acronym được coi là duy nhất.

class League < ActiveRecord::Base 
    validates :acronym, uniqueness: true 
end 

dẫn đến sự phá vỡ sau trong các thử nghiệm

ActiveRecord :: RecordInvalid: Validation thất bại: Viết tắt đã được thực hiện

Làm thế nào tôi có thể làm việc xung quanh này, tốt nhất mà không cần tạo một hệ thống phân cấp trong thiết lập để thử nghiệm?

Nếu theres một cái gì đó tốt hơn so với factory_girl cho những gì tôi đang cố gắng để đạt được, xin đừng đề nghị nó

Trả lời

4

Tùy thuộc vào nơi bạn đang gọi điện thoại FactoryGirl.create các hồ sơ sẽ được tạo ra cho mỗi spec bạn có. Những gì bạn muốn là database_cleaner, một khi đã được thiết lập, nó sẽ dọn sạch cơ sở dữ liệu của bạn sau mỗi lần xác định để đảm bảo rằng các lỗi xác thực của bạn không còn là vấn đề nữa.

EDIT

Rất tiếc, tôi không nhận định câu hỏi của bạn. Những gì bạn sẽ muốn làm là thể sử dụng faker đá quý để tạo chuỗi ngẫu nhiên cho mỗi từ viết tắt hoặc sử dụng factory_girl chuỗi như

FactoryGirl.define do 
    sequence :acronym do |n| 
    "NBA#{n}" 
    end 

    factory :league do 
    acronym 
    end 
end 

Sử dụng chuỗi này sẽ thực sự chắc chắn rằng tất cả các giải đấu được tạo ra có một từ viết tắt độc đáo.