mercredi 8 juillet 2020

Strange situation with require 'test_helper' in Rails 6 (edge) application

I have a Rails 6 (edge branch) application with a gemfile like this:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'

gem 'rails', github: "rails/rails", branch: "6-0-stable"


# TAAALK ADDITIONS

# amazon S3
gem "aws-sdk-s3", require: false

# Font Awesome
gem 'font-awesome-sass', '~> 5.12.0'
# Pagination
gem 'will_paginate', '~> 3.1.1'
# Images
gem 'mini_magick'
# gem 'cloudinary', '~> 1.12.0'
# Dot Env
gem 'dotenv-rails', groups: [:development, :test]
# Simple Form
gem 'simple_form'
# Fake emails in development
gem 'letter_opener', group: :development
# Friendly URLs
gem 'friendly_id', '~> 5.2.4'
# Devise
gem 'devise'
# Bootstrap
gem 'bootstrap', '~> 4.4.1'
# Jquery for Bootstrap
gem 'jquery-rails'
# Sendgrid for email
gem 'sendgrid-ruby'
# Pundit for authentication
gem 'pundit'
# Factroy Bot for testing
group :development, :test do
  gem 'factory_bot_rails'
end

# END TAAALK ADDITIONS

# Use postgresql
gem 'pg'
# Use Puma as the app server
gem "puma", ">= 4.3.3"
# Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
# Use development version of Webpacker
gem 'webpacker', github: "rails/webpacker"

# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
gem 'image_processing', '~> 1.2'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.2', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'web-console', github: 'rails/web-console'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of web drivers to run system tests with browsers
  gem 'webdrivers'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

I am doing testing and first had an issue where I was unable to load 'test_helper':

no such file to load -- test_helper (LoadError)

This was resolved nicely with: test_helper don't load when I make a test

=> Changing

require 'test_helper'

to

require File.dirname(__FILE__) + '/../test_helper'

1. Why did I have to do this? I feel like this should work out of the box?

When I then resolved this I get the following:

Traceback (most recent call last):
    28: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `<main>'
    27: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `load'
    26: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/exe/rspec:4:in `<top (required)>'
    25: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:45:in `invoke'
    24: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:71:in `run'
    23: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:86:in `run'
    22: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:102:in `setup'
    21: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1604:in `load_spec_files'
    20: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1604:in `each'
    19: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1606:in `block in load_spec_files'
    18: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2103:in `load_file_handling_errors'
    17: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2103:in `load'
    16: from /Users/joshua/code/JoshInLisbon/rails-projects/taaalk_edge/test/policies/tlk_policy_test.rb:2:in `<top (required)>'
    15: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    14: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    13: from /Users/joshua/code/JoshInLisbon/rails-projects/taaalk_edge/test/test_helper.rb:4:in `<top (required)>'
    12: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
    11: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
    10: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
     9: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
     8: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
     7: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
     6: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pundit-2.1.0/lib/pundit/rspec.rb:5:in `<main>'
     5: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pundit-2.1.0/lib/pundit/rspec.rb:6:in `<module:Pundit>'
     4: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pundit-2.1.0/lib/pundit/rspec.rb:7:in `<module:RSpec>'
     3: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pundit-2.1.0/lib/pundit/rspec.rb:8:in `<module:Matchers>'
     2: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core.rb:180:in `const_missing'
     1: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require': cannot load such file -- rspec/expectations (LoadError)
    13: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `<main>'
    12: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `load'
    11: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/exe/rspec:4:in `<top (required)>'
    10: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:45:in `invoke'
     9: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:71:in `run'
     8: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:86:in `run'
     7: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:102:in `setup'
     6: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1604:in `load_spec_files'
     5: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1604:in `each'
     4: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:1606:in `block in load_spec_files'
     3: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2102:in `load_file_handling_errors'
     2: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/configuration.rb:2106:in `rescue in load_file_handling_errors'
     1: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require': cannot load such file -- rspec/core/did_you_mean (LoadError)
    14: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `<main>'
    13: from /Users/joshua/.rbenv/versions/2.6.3/bin/rspec:23:in `load'
    12: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/exe/rspec:4:in `<top (required)>'
    11: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:45:in `invoke'
    10: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:71:in `run'
     9: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:86:in `run'
     8: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:104:in `setup'
     7: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/runner.rb:104:in `ensure in setup'
     6: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/world.rb:187:in `announce_filters'
     5: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/world.rb:195:in `report_filter_message'
     4: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb:100:in `message'
     3: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb:207:in `notify'
     2: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rspec-core-3.9.2/lib/rspec/core/reporter.rb:237:in `ensure_listeners_ready'
     1: from /Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:23:in `require'
/Users/joshua/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:34:in `require': cannot load such file -- rspec/core/profiler (LoadError)

See the bits that read:

cannot load such file -- rspec/...

As you can see above, I have not added gem 'rspec-rails' to my gemfile.rb. When I look at the edge branch info on testing (https://edgeguides.rubyonrails.org/testing.html), it does not mention having to do this.

2. Does anyone know why I am getting these errors and what I need to do to correct them?

Thank you

Aucun commentaire:

Enregistrer un commentaire