2

別々のファイルに2つのファクトリ(post_factory.rb、 )があります。comment_factory.rb少し複雑なファクトリを作成したいと思います。これにより、関連するコメントを含む投稿が作成されます。と呼ばれる3番目のファイルを作成しcomplex_factory.rb、次のコードを記述しました。

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

ただしrake spec、ファイルが投稿ファクトリとコメントファクトリを認識していないことを示すエラーが発生します。次の瞬間、私は素朴にrequiresを一番上に書きました:

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

しかし、それでは適切な結果は得られませんでした。多分これは実際に間違った方向を見る必要がありますか?または、それらはほとんど問題ではありません(可視性のために工場を登録することは、私が想定しているよりも複雑になる可能性があるため)。

私は何かが足りないのですか?何か案は?

4

2 に答える 2

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
于 2010-03-19T23:04:06.910 に答える
0

追加したrequireは、適切なパスプレフィックスがないため、機能しません。

ただし、factory_girlはこれを自動的に実行する必要があります。gitリポジトリのREADMEを参照してください。それは言う:

ファクトリはどこにでも定義できますが、次の場所のファイルで定義されている場合は自動的にロードされます。

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
于 2010-03-19T23:17:33.023 に答える