pat / combustion

Simple, elegant testing for Rails Engines
MIT License
708 stars 51 forks source link

Autoloading models? #80

Closed Asherlc closed 6 years ago

Asherlc commented 6 years ago

Is there anything special required to autoload models in the 'app/models' directory of an engine? I've got spec/internal setup according the readme, but I'm getting uninitialized constant MyModelName when I try to run any model specs. Are there any special configs required? I've got Combustion.initialize! :all in my spec_helper.

pat commented 6 years ago

Hi Asher

It's certainly possible to have models autoloaded - in my own gems, I find I need to make sure I have Rails being loaded, and the gem I'm developing to have a subclass of Rails::Engine which is also loaded as part of the gem setup. Are both of these things the case in your own code?

Some examples:

Asherlc commented 6 years ago

Thanks for the quick response! I've added both lines to their respective files in my engine, but I'm still getting the same error. I notice your model is scoped to the Visa namespace: https://github.com/inspire9/visa/blob/master/app/models/visa/token.rb.

My model however is in the global namespace (extracted from a previous app where it still depends on the naming). Is it possible that would cause problems?

Asherlc commented 6 years ago

For reference, here's my current spec_helper.rb:

require 'bundler'

Bundler.require :default, :development

require 'rails'
require 'combustion'

# If you're using all parts of Rails:
Combustion.initialize! :all
# Or, load just what you need:
# Combustion.initialize! :active_record, :action_controller

require 'rspec/rails'
# If you're using Capybara:
# require 'capybara/rails'

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end
Asherlc commented 6 years ago

Ah! I needed to add require <my_engine> to the spec_helper. Mystery solved!

pat commented 6 years ago

Good to know you got it figured out :)

For what it's worth, I think you should have the require statement for your engine in your actual gem's code, so it's available in Rails apps, not just in your tests.