문제

나는 두 개의 공장이있다 (post_factory.rb, comment_factory.rb) 별도의 파일로. 나는 약간 복잡한 공장을 만들고 싶습니다.이 댓글이 포함 된 게시물을 만들고 싶습니다. 나는 세 번째 파일을 만들었습니다 complex_factory.rb, 다음 코드를 작성했습니다.

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

하지만 rake spec 파일이 Post and Comment 공장을 알지 못한다는 점에서 오류가 발생합니다. 바로 다음 순간에 나는 순진하게 썼다.

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

그러나 그것은 적절한 결과를 얻지 못했습니다. 어쩌면 이것은 실제로 잘못된 방향을보아야합니까? 또는 그들은 거의 중요하지 않습니다 (가시성을 위해 공장을 등록하는 것이 내가 가정하는 것이 더 복잡 할 수 있기 때문에).

내가 뭔가를 놓치고 있습니까? 어떤 아이디어?

도움이 되었습니까?

해결책

실제로 나는 공장이있는 파일이 서로를 본다는 것을 알아 냈습니다. 우리가있는 경우 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

다른 팁

적절한 경로 접두사가 없기 때문에 추가해야 할 필요가 작동하지 않습니다.

그러나 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top