-
-
Notifications
You must be signed in to change notification settings - Fork 373
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix undefined method config #440
Fix undefined method config #440
Conversation
Some tests put factory files under the `lib`. But since Rails 7.1, Rails loads `lib` directory by default in a new application. https://guides.rubyonrails.org/7_1_release_notes.html#introducing-config-autoload-lib-and-config-autoload-lib-once-for-enhanced-autoloading But factory files don't follow the naming rule of Zeitwerk. So Zeitwerk raises `Zeitwerk::NameError`. To avoid the error, this changed to ignore the directory that puts factory files.
Some test code loads the route file twice. This wasn't a problem before Rails 7.0 because we didn't have a route. But, Rails 7.1 has one route by default. So the test application raises the following error during the load. ``` Invalid route name, already in use: 'rails_health_check' (ArgumentError) You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here: https://guides.rubyonrails.org/routing.html#restricting-the-routes-created ``` The routing isn't a matter of this gem, so just ignore that for running the test.
`Rails.application` is not available when the railties are collected, so we move the ActiveRecord configuration into the initializer phase. ``` NoMethodError: undefined method `config' for nil:NilClass (NoMethodError) application.config ^^^^^^^ /project/app/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8/lib/rails.rb:47:in `configuration' /project/app/vendor/bundle/ruby/3.2.0/gems/factory_bot_rails-6.4.0/lib/factory_bot_rails/railtie.rb:25:in `block in <class:Railtie>' ```
It happens if the AR::Base as already been loaded. For example: DatabaseCleaner/database_cleaner-active_record#91
aa98fdf
to
80d84ff
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Thank you for cherry picking the fixes and adding a test. I'm asking for a second pair of eyes to take a look at this, then I'll cut a new release.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! I tested it locally, and it's working correctly. Ty for the fix!
Thanks a lot @neilvcarvalho and @matsales28. Do you plan to make a release? ✨ |
@benoittgt Working on it right now, and should be up in a few minutes |
Released on https://github.com/thoughtbot/factory_bot_rails/releases/tag/v6.4.2 - thank you for working on this! |
Thank you so much 🙌 |
Hello
This PR makes last version of factory_bot_rails working with Rails and other gems like
database_cleaner-active_record
whenActiveRecord::Base
is loaded too early. Also the code is tested on last Rails version with the work of @y-yagi. I choose to cherry pick the commit because of great job.I added a test that reproduce exactly the error and could behave as a non-regression test. Without the patch:
Fix: #432
Fix: #436
Close: #429
For me the code of this gem is not bad, it's because of other gem that we have errors. See recommendations and discussions on this subject: rails/rails#46567
cc @mike-burns