File: load_definitions.feature

package info (click to toggle)
ruby-factory-bot-rails 6.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 316 kB
  • sloc: ruby: 635; makefile: 6; sh: 4
file content (199 lines) | stat: -rw-r--r-- 6,258 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
Feature: automatically load factory definitions

  Background:
    When I create a new rails application
    And I add "factory_bot_rails" from this project 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 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
    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/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 of some_railtie" do
          railtie_user = FactoryBot.create(:factory_from_some_railtie)
          assert_equal 'Artem', railtie_user.name

          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 "2 assertions, 0 failures, 0 errors"