У нас возникла проблема с новым обратным вызовом after_build от Factory Girl, который заставил работать параметры переопределения. мы определили модель как:
factory :widget do
name "Widget Name"
position 1
creator
content_type "text_content"
content "This is the content"
change_comment "This is the change comment"
after_build do |widget|
widget.page = Factory.create(:page)
widget.canvas = widget.page.canvas
end
end
обратите внимание, что для страницы и виджета в этом примере требуется холст; виджет может иметь страницу. мы хотим, чтобы фабрика создала виджет, принадлежащий странице, а виджет и страница принадлежали одному и тому же холсту.
у нас есть тест rspec, который должен проверить, что отсутствие действительного холста делает модель виджета недействительной
context "Canvas" do
it "should be required" do
widget = Factory.build(:widget, :canvas => nil)
widget.should_not be_valid
end
end
т.е. Factory.build (: widget,: canvas => nil) не должен быть допустимым, поскольку холст передается в nil, однако метод after_build игнорирует это и все еще применяет холст к модели.
Примечание: мы можем обойти эту проблему, изменив тест rspec на следующий, где мы создадим правильную модель, затем установим холст равным nil как 2-й шаг, и это работает правильно, т.е.
context "Canvas" do
it "should be required" do
widget = Factory.build(:widget)
widget.canvas = nil
widget.should_not be_valid
end
end
однако такое ощущение, что мы потеряли некоторые основные функции Factory Girl, поэтому мы надеемся, что в нашей фабричной модели для девочек упущено что-то, что позволит нам сделать это более правильно. Очень ценю любые идеи, которые люди могут предоставить!