2010-03-16 2 views
2

У меня есть две фабрики (post_factory.rb, comment_factory.rb) в отдельных файлах. Я хотел бы создать немного сложную фабрику, которая создаст сообщение со связанными комментариями для меня. Я создал третий файл, называемый complex_factory.rb, и написал следующий код:Простой вопрос factory_girl

Factory.define :post_with_comments, :parent => :post do |post| 
    post.after_create { |p| Factory(:comment, :post => p) } 
end 

rake spec Но возникает ошибку, о том, что файл не знает о почтовых и комментариях заводов. В самый следующий момент я наивно писал в верхней части:

require "post_factory.rb" 
require "comment_factory.rb" 

Но это не дало никакого правильного результата. Может быть, это требует, чтобы на самом деле выглядело неправильное направление? Или они в значительной степени не имеют значения (поскольку регистрация заводов для видимости может быть более сложной, чем я предполагаю).

Я что-то упустил? Есть идеи?

+1

Не настоящее решение, но как просто положить все эти вещи в один файл? –

+0

Как говорит Милан, поместите его в один файл. – Nick

+0

'require File.dirname (__ FILE__) +" /post_factory.rb "'? –

ответ

3

На самом деле я выяснил, что файлы с заводами видят друг друга. Если мы имеем comment_factory.rb наряду с post_factory.rb, это следующий код будет работать нормально (после завода):

Factory.define :post_with_comments do |post| 
    post.caption = "Caption" 
    post.body "Some dummy text" 
    post.after_create { |p| Factory(:comment, :post => p) } 
end 

Хотя comment_factory.rb выглядит следующим образом:

Factory.define :comment do |comment| 
    comment.body "Some wise comment text" 
    comment.post_id 
end 
0

Требовать вы добавили не работает потому, что он не имеет правильного префикса пути.

Однако factory_girl должен делать это за вас автоматически. См. the README in the git repository. Он говорит:

заводы могут быть либо определены в любом месте, но будет автоматически загружаться, если они определены в файлах в следующих местах:

test/factories.rb 
spec/factories.rb 
test/factories/*.rb 
spec/factories/*.rb 

Вы должны быть ваши заводы вне места по умолчанию , Если вы не можете просто переместить их по умолчанию, используйте примерно следующее:

Dir[File.expand_path(File.dirname(__FILE__)) + "/factories/*.rb"].each do |file| 
    require file 
end 
Смежные вопросы