LoadError: невозможно загрузить такой файл rails_helper (Rails 6 и Rspec)

Я пытаюсь написать тесты rspec для проекта rails 6.

Когда я запускаю rspec spec/controllers/user_spec.rb, я получаю эту ошибку

    Migrations are pending. To resolve this issue, 
      run:rails db:migrate RAILS_ENV=test 
    No examples found.

Я запускаю rails db:migrate RAILS_ENV=test и получаю эту ошибку


    rails aborted!
    LoadError: cannot load such file -- rails_helper
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:40:in `rescue in require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:26:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/workspace/squealer/spec/factories/devise.rb:1:in `<main>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:54:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:20:in `block (2 levels) in find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:19:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:19:in `block in find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:15:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:15:in `find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/reload.rb:6:in `reload'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot_rails-5.1.1/lib/factory_bot_rails/railtie.rb:26:in `block in <class:Railtie>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:69:in `block in execute_hook'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:62:in `with_execution_control'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:67:in `execute_hook'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:52:in `block in run_load_hooks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:51:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:51:in `run_load_hooks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application/finisher.rb:129:in `block in <module:Finisher>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `instance_exec'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `run'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:61:in `block in run_initializers'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:60:in `run_initializers'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:363:in `initialize!'
    /Users/MacBookAir/workspace/squealer/config/environment.rb:14:in `<main>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `block in require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:291:in `load_dependency'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:339:in `require_environment!'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:515:in `block in run_tasks_blocks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/command.rb:48:in `invoke'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands.rb:18:in `<main>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `block in require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:291:in `load_dependency'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `require'
    /Users/MacBookAir/workspace/squealer/bin/rails:9:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client.rb:30:in `run'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/bin/spring:49:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>'
    /Users/MacBookAir/workspace/squealer/bin/spring:15:in `<top (required)>'
    bin/rails:3:in `load'
    bin/rails:3:in `<main>'

    Caused by:
    Bootsnap::LoadPathCache::FallbackScan:

    Tasks: TOP => db:migrate => db:load_config => environment
    (See full trace by running task with --trace)

Итак, я удаляю гем bootnap, перехожу в config / boot.rb и удаляю эту строку require 'bootsnap/setup'

Затем я запускаю установку пакета и снова пытаюсь запустить rails db:migrate RAILS_ENV=test.

Я получаю еще одну ошибку


    rails aborted!
    LoadError: cannot load such file -- rails_helper
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/workspace/squealer/spec/factories/devise.rb:1:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:20:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:20:in `block (2 levels) in find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:19:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:19:in `block in find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:15:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/find_definitions.rb:15:in `find_definitions'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot-5.1.1/lib/factory_bot/reload.rb:6:in `reload'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/factory_bot_rails-5.1.1/lib/factory_bot_rails/railtie.rb:26:in `block in <class:Railtie>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:69:in `block in execute_hook'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:62:in `with_execution_control'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:67:in `execute_hook'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:52:in `block in run_load_hooks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:51:in `each'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/lazy_load_hooks.rb:51:in `run_load_hooks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application/finisher.rb:129:in `block in <module:Finisher>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `instance_exec'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `run'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:61:in `block in run_initializers'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/initializable.rb:60:in `run_initializers'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:363:in `initialize!'
    /Users/MacBookAir/workspace/squealer/config/environment.rb:14:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/zeitwerk-2.2.1/lib/zeitwerk/kernel.rb:23:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `block in require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:291:in `load_dependency'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/activesupport-6.0.1/lib/active_support/dependencies.rb:325:in `require'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:339:in `require_environment!'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/application.rb:515:in `block in run_tasks_blocks'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands/rake/rake_command.rb:20:in `perform'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/command.rb:48:in `invoke'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/railties-6.0.1/lib/rails/commands.rb:18:in `<top (required)>'
    /Users/MacBookAir/workspace/squealer/bin/rails:9:in `require'
    /Users/MacBookAir/workspace/squealer/bin/rails:9:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/client.rb:30:in `run'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/bin/spring:49:in `<top (required)>'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load'
    /Users/MacBookAir/.rvm/gems/ruby-2.6.3/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>'
    /Users/MacBookAir/workspace/squealer/bin/spring:15:in `<top (required)>'
    bin/rails:3:in `load'
    bin/rails:3:in `<main>'
    Tasks: TOP => db:migrate => db:load_config => environment
    (See full trace by running task with --trace)

На этом этапе я готов выбросить свой ноутбук в корзину. Я даже не знаю, что такое gem zeitwerk и что делает поточно-безопасный загрузчик кода. Я просто знаю, что это требуется для Rails 6.

Мое репозиторий на github находится здесь

Кто-нибудь знает, что я делаю не так?


person David Lee    schedule 20.11.2019    source источник
comment
Вы пробовали предложения здесь: stackoverflow.com/questions/25800122/   -  person The Wizard    schedule 21.11.2019
comment
Да, я видел этот пост. Я использую rspec 3.9, и я сделал rails generate rspec:install, так я получил файл rails_helper.rb. Но это все еще не помогло мне   -  person David Lee    schedule 21.11.2019


Ответы (2)


Я только что просмотрел ваше репо. На самом деле у вас нет rails_helper файла. Вы должны найти и заменить rails_helper, заменив его на test_helper

person Adim    schedule 21.11.2019
comment
Так что у меня действительно есть файл rails_helper.rb. Он находится в spec / rails_helper.rb. Он создается автоматически при запуске rails generate rspec:install. Я считаю, что test_helper.rb нужен только для Minitest, который я не использую. - person David Lee; 21.11.2019

Ах, я понял это. Я не внимательно читал журналы ошибок.

Я использую драгоценный камень Devise. В моих журналах ошибок восьмая строка ниже упоминала файл в spec / factory / devise.rb.

Я посмотрел на этот файл и увидел, что я поместил require 'rails_helper.rb' в начало файла. Я удалил эту строку и теперь могу запустить rails db:migrate RAILS_ENV=TEST

Думаю, это урок по внимательному чтению журналов ошибок.

person David Lee    schedule 21.11.2019