Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FactoryGirl usage #66

Closed
jmarceli opened this issue Apr 30, 2016 · 7 comments
Closed

FactoryGirl usage #66

jmarceli opened this issue Apr 30, 2016 · 7 comments

Comments

@jmarceli
Copy link

jmarceli commented Apr 30, 2016

Is it possible to mock data using FactoryGirl?

It will be very useful feature as if you use it for tests you probably have all factories ready.

I've tried to use it as follow:

spec/dummy/app/mailer_previews/mynamespace/order_mailer_preview.rb

FactoryGirl.definition_file_paths = Dir[Mynamespace::Core::Engine.root.join('spec/factories/*.rb')]
FactoryGirl.definition_file_paths += [Mynamespace::Core::Engine.root.join('spec/factories.rb')]
FactoryGirl.find_definitions

module Mynamespace
class OrderMailerPreview
  def confirmation_email
    OrderMailer.confirmation_email(FactoryGirl.build(:order))
  end
end
end

But I'm getting Factory not registered: order error.

What is strange my FactoryGirl.find_definitions returns correct file set:

>> FactoryGirl.find_definitions
=> ["/Users/user/Work/mynamespace/backend/base/core/spec/factories/item_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/material_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/order_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/order_history_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/permission_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/role_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/status_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories/user_factory.rb", "/Users/user/Work/mynamespace/backend/base/core/spec/factories.rb"]
@glebm
Copy link
Owner

glebm commented Apr 30, 2016

Requiring factory_girl_rails and spec/factories should be sufficient. E.g. https://github.com/thredded/thredded/blob/master/db/seeds.rb

@jmarceli
Copy link
Author

Thanks for the fast reply. It should work like you described but it doesn't.

Maybe the problem is that I write rails engine not rails application, so factories are defined inside engine spec/factories and mailer previews are inside dummy app for this engine spec/dummy/app/mailer_previews.

@jmarceli
Copy link
Author

I manage to get somewhere when I change my preview file to:

spec/dummy/app/mailer_previews/mynamespace/order_mailer_preview.rb

require 'factory_girl_rails'
require '../factories'
Dir["../factories/*"].each { |f| require f }
#p FactoryGirl.factories # prints out all registered factories

module Mynamespace
class OrderMailerPreview
  def confirmation_email
    order = FactoryGirl.build(:order, :with_items)
    OrderMailer.confirmation_email(order)
  end
end
end

But I works only on first page view! After page reload my factories get unregistered (line p FactoryGirl.factories returns empty array) and I have to reload rails server.

@glebm
Copy link
Owner

glebm commented Apr 30, 2016

Use require_dependency instead of require for autoloading to work.

@jmarceli
Copy link
Author

I've "upgraded" my requires to:

Dir[Mynamespace::Core::Engine.root.join('spec', 'factories', '*')].each do |f|
  require_dependency f
end

But I'm still getting Factory not registered: order after page refresh and success on initial load.

@jmarceli
Copy link
Author

jmarceli commented May 2, 2016

It might be my fault so I close the issue. For anyone interested I've created SO topic http://stackoverflow.com/questions/36965377/rails-factorygirl-inside-app-in-development-env where I post an answer if I'll ever find one.

@jmarceli jmarceli closed this as completed May 2, 2016
@jmarceli
Copy link
Author

jmarceli commented May 3, 2016

Resolved at least for now. Solution described at SO, it was Devise related issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants