1
0
Fork 0
mirror of https://github.com/thoughtbot/factory_bot_rails.git synced 2022-11-09 11:49:18 -05:00
thoughtbot--factory_bot_rails/features/load_definitions.feature
Daniel Colson 4e730548cb 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.
2018-09-14 20:09:10 +00:00

153 lines
4.6 KiB
Gherkin

Feature: automatically load factory definitions
Background:
When I successfully run `bundle exec rails new testapp`
And I cd to "testapp"
And I add "factory_bot_rails" from this project as a dependency
And I add "test-unit" as a dependency
And I run `bundle install` with a clean environment
And I write to "db/migrate/1_create_users.rb" with:
"""
migration_class =
if ActiveRecord::Migration.respond_to?(:[])
ActiveRecord::Migration[4.2]
else
ActiveRecord::Migration
end
class CreateUsers < migration_class
def self.up
create_table :users do |t|
t.string :name
end
end
end
"""
When I run `bundle exec rake db:migrate` with a clean environment
And I write to "app/models/user.rb" with:
"""
class User < ActiveRecord::Base
end
"""
Scenario: generate a Rails application and use factory definitions
When I write to "test/factories.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 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__)
"""
When I write to "lib/some_railtie/railties.rb" with:
"""
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
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"