【问题标题】:RSpec Test Suite Not Running After Rails 5.0.1 UpgradeRails 5.0.1 升级后 RSpec 测试套件未运行
【发布时间】:2019-02-21 07:24:34
【问题描述】:

我们正在将 Rails 应用程序从 3.2 升级到 5.0。我们到了 4.2 并且有一个测试套件通过了 100%,我们现在在 5.0.1 并且测试套件抛出了一个参数错误。

运行rake spec:models时出现如下错误:

An error occurred while loading rails_helper.
Failure/Error: require File.expand_path("../config/environment", __dir__)

ArgumentError:
  wrong number of arguments (given 0, expected 2..3)

Ruby V 2.5.1 RSpec V 3.8

在开发环境中运行 rake db:migrate 任务完成,但是..

在测试环境中运行 db:migrate 后,出现以下错误:

ArgumentError: wrong number of arguments (given 0, expected 2..3)
/home/vagrant/rtest/config/initializers/load_rtest_config.rb:5:in `test'
/home/vagrant/rtest/config/initializers/load_rtest_config.rb:5:in `<top 
(required)>'
/home/vagrant/rtest/config/environment.rb:8:in `<top (required)>'
/home/vagrant/rtest/bin/rails:4:in `require'
/home/vagrant/rtest/bin/rails:4:in `<main>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

环境.rb:

# Load the rails application
# require File.expand_path('../application', __FILE__) # RAILS 4.2
require_relative 'application'


# Initialize the rails application
# Changes for rtest upgrade
Rails.application.initialize!

load_rtest_config.rb:

require 'ostruct'
require 'yaml'

config = OpenStruct.new(YAML.load_file("#{Rails.root}/config/rtest.yml"))
::RTestConfig = OpenStruct.new(config.send(Rails.env))

::SummaryConfig = OpenStruct.new(YAML.load_file("# 
{Rails.root}/config/summary.yml"))

::LDAPConfig = OpenStruct.new(YAML.load_file("# 
{Rails.root}/config/ldap.yml"))

相关宝石:

  gem 'rails-controller-testing'

group :test do
  gem 'factory_bot_rails', :require => false
  gem 'capybara'
  gem 'guard-rspec'
  gem 'guard-spork'
  gem 'shoulda'
  gem 'rspec-its'
  gem 'rubocop-rspec'
  gem 'rspec-rails'
  gem 'rails-controller-testing'

  #Rails 5 Upgrade
  # gem 'shoulda-matchers'
end

rails_helper.rb

require 'rubygems'
# require 'spork'
require 'database_cleaner'
require 'rspec/its'

# ActiveRecord::Migration.check_pending!
# ActiveRecord::Migration.maintain_test_schema!


require 'spec_helper'
require File.expand_path("../config/environment", __dir__)
require 'rspec/rails'
require 'rspec/autorun'
require 'factory_bot_rails'
require 'capybara/rspec'
require 'authlogic/test_case'
  ENV["RAILS_ENV"] ||= 'test'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}


  RSpec.configure do |config|
    config.expose_current_running_example_as :example
    config.use_transactional_fixtures = true
    config.include FactoryBot::Syntax::Methods
    config.include Shoulda::Matchers::ActiveModel, type: :model
    config.include Shoulda::Matchers::ActiveRecord, type: :model
    config.include Devise::Test::ControllerHelpers, :type => :controller
    config.include LoginMacros, :type => :controller
    config.include LoginMacrosRequest, :type => :request
    config.after(:each) { Warden.test_reset! }
    end

  puts "Reloading controllers and models"
  Dir["#{Rails.root}/app/controllers//*.rb"].each do |controller|
    load controller
  end
  Dir["#{Rails.root}/app/models//*.rb"].each do |model|
    load model
  end
  puts "Done"

  FactoryBot.reload
  Dir[Rails.root.join("spec/support/**/*.rb")].each do |f|
    require f
  end

编辑:抱歉,如果问题不清楚,这是我的第一个问题,谢谢。

【问题讨论】:

  • 堆栈跟踪应该告诉您rails_helper.rb 中的哪一行引发了错误。但是里面有很多杂物。你真的需要重新加载模型吗?如果您不使用 ActiveRecord::Fixtures,则不应使用 config.use_transactional_fixtures = true
  • 嗨,Max,感谢您的回复。问题出现在 rails_helper require File.expand_path("../config/environment", __dir__) 的第 9 行,每次 spec.rb 文件调用它时,它都会返回 ArgumentError: wrong number of arguments (given 0, expected 2..3) 并以: Process finished with exit code 1 Empty 结束测试套件。

标签: ruby-on-rails rspec


【解决方案1】:

解决了!

问题出在这里:

ArgumentError: wrong number of arguments (given 0, expected 2..3)
/home/vagrant/rtest/config/initializers/load_rtest_config.rb:5:in `test'

“测试”这个词导致 ruby​​mine 认为它是一个需要 2..3 个参数的方法测试(不知道它是在哪里定义的)。

load_rtest_config

config = OpenStruct.new(YAML.load_file("#{Rails.root}/config/rtest.yml"))
::RTestConfig = OpenStruct.new(config.send(Rails.env))

上面的 .send 方法没有正确传递字符串“test”。然而,它会通过“发展”。

修复:

::RTestConfig = OpenStruct.new(config[Rails.env])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多