File: reloading.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 (135 lines) | stat: -rw-r--r-- 4,258 bytes parent folder | download | duplicates (2)
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
Feature: automatically reloading factory_bot 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:
      """
      class CreateUsers < ActiveRecord::Migration[5.0]
        def self.up
          create_table :users do |t|
            t.string :name
          end
        end
      end
      """
    And I run `bin/rails db:migrate` with a clean environment

  Scenario: When using factory_bot_rails together with Spring
    I want changes to my application to trigger the factory_bot_rails reloader
    So that factory_bot_rails doesn't hold onto stale class references

    When I write to "app/models/user.rb" with:
      """
      class User < ActiveRecord::Base
      end
      """
    And I write to "test/factories.rb" with:
      """
      FactoryBot.define do
        factory :author, class: User do
          name { "Frank" }
        end
      end
      """
    And I write to "test/unit/user_test.rb" with:
      """
      require 'test_helper'

      class UserTest < ActiveSupport::TestCase
        test "user factory" do
          author = FactoryBot.create(:author)

          assert_equal author.class.object_id, User.object_id
        end
      end
      """
    And I run `bundle binstubs bundler spring --force` with a clean environment
    And I run `bin/spring binstub --all` with a clean environment
    And I run `bin/rails test` with Spring enabled
    And I append to "app/models/user.rb" with:
      """
      # User model edited
      """
    And I run `bin/rails test` with Spring enabled
    And I run `bin/spring stop` with a clean environment
    #Then the output should contain "1 runs, 1 assertions"
    And the output should not contain "Failure:"

  Scenario: When using factory_bot_rails together with Spring
    I want changes to my factory_bot definitions to trigger a reload
    So that I can use my updated definitions without stopping spring

    When I write to "app/models/user.rb" with:
      """
      class User < ActiveRecord::Base
      end
      """
    And I write to "test/factories.rb" with:
      """
      # Empty definition file to be picked up by the file watcher

      """
    And I run `bundle binstubs bundler spring --force` with a clean environment
    And I run `bin/spring binstub --all` with a clean environment
    And I run `bin/rails test` with Spring enabled
    And I append to "test/factories.rb" with:
      """
      FactoryBot.define do
        factory :author, class: User do
          name { "Frank" }
        end
      end
      """
    And I write to "test/unit/user_test.rb" with:
      """
      require 'test_helper'

      class UserTest < ActiveSupport::TestCase
        test "user factory" do
          author = FactoryBot.create(:author)

          assert_equal author.class.object_id, User.object_id
        end
      end
      """
    And I run `bin/rails test` with Spring enabled
    And I run `bin/spring stop` with a clean environment
    #Then the output should contain "1 runs, 1 assertions"
    And the output should not contain "Failure:"

  Scenario: Initializing the reloader with I18n support
      When I write to "app/models/user.rb" with:
        """
        class User
          TRANSLATION = I18n.translate("translation_key")
        end
        """
      And I write to "config/locales/en.yml" with:
        """
          en:
            translation_key: "translation_value"
        """
      And I write to "test/factories.rb" with:
        """
        FactoryBot.define do
          factory :user do
            User::TRANSLATION
          end
        end
        """
      And I write to "test/unit/user_test.rb" with:
        """
        require 'test_helper'

        class UserTest < ActiveSupport::TestCase
          test "user factory" do
            user = FactoryBot.build(:user)

            assert_equal "translation_value", User::TRANSLATION
          end
        end
        """
      And I run `bin/rails test` with a clean environment
      Then the output should contain "1 runs, 1 assertions"
      And the output should not contain "Failure:"