2018-09-09 21:44:34 -04:00
|
|
|
Feature: automatically load factory definitions
|
2012-12-19 14:46:21 -05:00
|
|
|
|
2011-11-30 13:13:31 -05:00
|
|
|
Background:
|
2020-03-29 11:51:41 -04:00
|
|
|
When I create a new rails application
|
2016-12-02 10:25:09 -05:00
|
|
|
And I add "factory_bot_rails" from this project as a dependency
|
2012-12-21 11:08:37 -05:00
|
|
|
And I run `bundle install` with a clean environment
|
2010-11-10 15:59:38 -05:00
|
|
|
And I write to "db/migrate/1_create_users.rb" with:
|
2010-06-09 11:42:48 -04:00
|
|
|
"""
|
2018-06-22 13:33:59 -04:00
|
|
|
migration_class =
|
|
|
|
if ActiveRecord::Migration.respond_to?(:[])
|
|
|
|
ActiveRecord::Migration[4.2]
|
|
|
|
else
|
|
|
|
ActiveRecord::Migration
|
|
|
|
end
|
|
|
|
|
|
|
|
class CreateUsers < migration_class
|
2010-06-09 11:42:48 -04:00
|
|
|
def self.up
|
|
|
|
create_table :users do |t|
|
|
|
|
t.string :name
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
2015-03-13 22:39:10 -04:00
|
|
|
When I run `bundle exec rake db:migrate` with a clean environment
|
2010-11-10 15:59:38 -05:00
|
|
|
And I write to "app/models/user.rb" with:
|
2010-06-09 11:42:48 -04:00
|
|
|
"""
|
|
|
|
class User < ActiveRecord::Base
|
|
|
|
end
|
|
|
|
"""
|
2011-11-30 13:13:31 -05:00
|
|
|
|
2014-05-26 23:39:51 -04:00
|
|
|
Scenario: generate a Rails application and use factory definitions
|
2010-11-10 15:59:38 -05:00
|
|
|
When I write to "test/factories.rb" with:
|
2010-06-09 11:42:48 -04:00
|
|
|
"""
|
2016-12-02 10:25:09 -05:00
|
|
|
FactoryBot.define do
|
2011-06-29 11:35:22 -04:00
|
|
|
factory :user do
|
2018-08-24 16:48:00 -04:00
|
|
|
name { "Frank" }
|
2011-06-29 11:35:22 -04:00
|
|
|
end
|
2010-06-09 11:42:48 -04:00
|
|
|
end
|
|
|
|
"""
|
2010-11-10 15:59:38 -05:00
|
|
|
When I write to "test/unit/user_test.rb" with:
|
2010-06-09 11:42:48 -04:00
|
|
|
"""
|
|
|
|
require 'test_helper'
|
|
|
|
|
|
|
|
class UserTest < ActiveSupport::TestCase
|
|
|
|
test "use factory" do
|
2016-12-02 10:25:09 -05:00
|
|
|
user = FactoryBot.create(:user)
|
2010-06-09 11:42:48 -04:00
|
|
|
assert_equal 'Frank', user.name
|
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
2015-03-13 22:39:10 -04:00
|
|
|
When I run `bundle exec rake test` with a clean environment
|
2014-05-26 23:39:51 -04:00
|
|
|
Then the output should contain "1 assertions, 0 failures, 0 errors"
|
2011-11-30 13:13:31 -05:00
|
|
|
|
2018-09-09 21:44:34 -04:00
|
|
|
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
|
2011-11-30 13:13:31 -05:00
|
|
|
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
|
2018-09-09 21:44:34 -04:00
|
|
|
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'
|
2011-11-30 13:13:31 -05:00
|
|
|
|
2018-09-09 21:44:34 -04:00
|
|
|
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"
|
|
|
|
|
2019-04-12 10:05:17 -04:00
|
|
|
Scenario: use 3rd-party factories with an initializer and without any user-defined factories
|
|
|
|
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
|
|
|
|
railtie_user = FactoryBot.create(:factory_from_some_railtie)
|
|
|
|
assert_equal 'Artem', railtie_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 together with a user-defined factory
|
2018-09-09 21:44:34 -04:00
|
|
|
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
|
2016-12-02 10:25:09 -05:00
|
|
|
initializer "some_railtie.factories", :after => "factory_bot.set_factory_paths" do
|
|
|
|
FactoryBot.definition_file_paths << File.expand_path('../factories', __FILE__)
|
2011-11-30 13:13:31 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
|
|
|
When I write to "lib/some_railtie/factories.rb" with:
|
|
|
|
"""
|
2016-12-02 10:25:09 -05:00
|
|
|
FactoryBot.define do
|
2015-02-26 19:36:06 -05:00
|
|
|
factory :factory_from_some_railtie, class: 'User' do
|
2018-08-24 16:48:00 -04:00
|
|
|
name { 'Artem' }
|
2011-11-30 13:13:31 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
2019-04-07 11:09:00 -04:00
|
|
|
When I write to "test/factories.rb" with:
|
|
|
|
"""
|
|
|
|
FactoryBot.define do
|
|
|
|
factory :user do
|
|
|
|
name { "Frank" }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
2011-11-30 13:13:31 -05:00
|
|
|
When I write to "test/unit/user_test.rb" with:
|
|
|
|
"""
|
|
|
|
require 'test_helper'
|
|
|
|
|
|
|
|
class UserTest < ActiveSupport::TestCase
|
|
|
|
test "use factory of some_railtie" do
|
2019-04-07 11:09:00 -04:00
|
|
|
railtie_user = FactoryBot.create(:factory_from_some_railtie)
|
|
|
|
assert_equal 'Artem', railtie_user.name
|
|
|
|
|
|
|
|
user = FactoryBot.create(:user)
|
|
|
|
assert_equal 'Frank', user.name
|
2011-11-30 13:13:31 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
"""
|
2015-03-13 22:39:10 -04:00
|
|
|
When I run `bundle exec rake test` with a clean environment
|
2019-04-07 11:09:00 -04:00
|
|
|
Then the output should contain "2 assertions, 0 failures, 0 errors"
|