mirror of
https://github.com/thoughtbot/factory_bot_rails.git
synced 2022-11-09 11:49:18 -05:00
Introduce definition file path configuration
Fixes #165 and closes #166 Currently the only way to customize the factory definition file paths is to do it in an initializer right after the "factory_bot.set_factory_paths" initializer. With this commit, we can customize factory definition file paths by setting `config.factory_bot.definition_file_paths` in config/application.rb or the appropriate environment file. Once we update the documentation to include this new configuration, we should be able to close #149 and #180 as well, since using this configuration can replace the initializer solution for sharing factories in an engine (the initializer solution will still work, but with the new configuration you don't need to know anything about the fbr railtie). This will also allow us to close #192, since we can use this configuration with an empty array to disable automatic loading of factories in development.
This commit is contained in:
parent
affd0771bf
commit
4e730548cb
2 changed files with 74 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
|||
Feature: automatically load step definitions
|
||||
Feature: automatically load factory definitions
|
||||
|
||||
Background:
|
||||
When I successfully run `bundle exec rails new testapp`
|
||||
|
@ -53,7 +53,34 @@ Feature: automatically load step definitions
|
|||
When I run `bundle exec rake test` with a clean environment
|
||||
Then the output should contain "1 assertions, 0 failures, 0 errors"
|
||||
|
||||
Scenario: use factories advertised by railties/engines/3rd-party gems
|
||||
Scenario: use custom definition file paths
|
||||
When I configure the factories as:
|
||||
"""
|
||||
config.factory_bot.definition_file_paths = ["custom_factories_path"]
|
||||
"""
|
||||
When I write to "custom_factories_path.rb" with:
|
||||
"""
|
||||
FactoryBot.define do
|
||||
factory :user do
|
||||
name { "Frank" }
|
||||
end
|
||||
end
|
||||
"""
|
||||
When I write to "test/unit/user_test.rb" with:
|
||||
"""
|
||||
require 'test_helper'
|
||||
|
||||
class UserTest < ActiveSupport::TestCase
|
||||
test "use factory" do
|
||||
user = FactoryBot.create(:user)
|
||||
assert_equal 'Frank', user.name
|
||||
end
|
||||
end
|
||||
"""
|
||||
When I run `bundle exec rake test` with a clean environment
|
||||
Then the output should contain "1 assertions, 0 failures, 0 errors"
|
||||
|
||||
Scenario: use 3rd-party factories with configured definition file paths
|
||||
When I append to "config/application.rb" with:
|
||||
"""
|
||||
require File.expand_path('../../lib/some_railtie/railties.rb', __FILE__)
|
||||
|
@ -62,7 +89,41 @@ Feature: automatically load step definitions
|
|||
"""
|
||||
module SomeRailtie
|
||||
class Railtie < ::Rails::Engine
|
||||
config.factory_bot.definition_file_paths << File.expand_path('../factories', __FILE__)
|
||||
end
|
||||
end
|
||||
"""
|
||||
When I write to "lib/some_railtie/factories.rb" with:
|
||||
"""
|
||||
FactoryBot.define do
|
||||
factory :factory_from_some_railtie, class: 'User' do
|
||||
name { 'Artem' }
|
||||
end
|
||||
end
|
||||
"""
|
||||
When I write to "test/unit/user_test.rb" with:
|
||||
"""
|
||||
require 'test_helper'
|
||||
|
||||
class UserTest < ActiveSupport::TestCase
|
||||
test "use factory of some_railtie" do
|
||||
user = FactoryBot.create(:factory_from_some_railtie)
|
||||
assert_equal 'Artem', user.name
|
||||
end
|
||||
end
|
||||
"""
|
||||
When I run `bundle exec rake test` with a clean environment
|
||||
Then the output should contain "1 assertions, 0 failures, 0 errors"
|
||||
|
||||
Scenario: use 3rd-party factories with an initializer
|
||||
When I append to "config/application.rb" with:
|
||||
"""
|
||||
require File.expand_path('../../lib/some_railtie/railties.rb', __FILE__)
|
||||
"""
|
||||
When I write to "lib/some_railtie/railties.rb" with:
|
||||
"""
|
||||
module SomeRailtie
|
||||
class Railtie < ::Rails::Engine
|
||||
initializer "some_railtie.factories", :after => "factory_bot.set_factory_paths" do
|
||||
FactoryBot.definition_file_paths << File.expand_path('../factories', __FILE__)
|
||||
end
|
||||
|
|
|
@ -7,17 +7,15 @@ require "rails"
|
|||
|
||||
module FactoryBotRails
|
||||
class Railtie < Rails::Railtie
|
||||
config.factory_bot = ActiveSupport::OrderedOptions.new
|
||||
config.factory_bot.definition_file_paths = FactoryBot.definition_file_paths
|
||||
|
||||
initializer "factory_bot.set_fixture_replacement" do
|
||||
Generator.new(config).run
|
||||
end
|
||||
|
||||
initializer "factory_bot.set_factory_paths" do
|
||||
FactoryBot.definition_file_paths = [
|
||||
Rails.root.join("factories"),
|
||||
Rails.root.join("test", "factories"),
|
||||
Rails.root.join("spec", "factories"),
|
||||
]
|
||||
FactoryBot.definition_file_paths = definition_file_paths
|
||||
end
|
||||
|
||||
initializer "factory_bot.register_reloader" do |app|
|
||||
|
@ -27,5 +25,13 @@ module FactoryBotRails
|
|||
config.after_initialize do
|
||||
FactoryBot.find_definitions
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def definition_file_paths
|
||||
config.factory_bot.definition_file_paths.map do |path|
|
||||
Rails.root.join(path)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue