失败/错误:需要'rspec/rails'类型错误:错误的参数类型类(预期模块)Rspec V3

Posted

技术标签:

【中文标题】失败/错误:需要\'rspec/rails\'类型错误:错误的参数类型类(预期模块)Rspec V3【英文标题】:Failure/Error: require 'rspec/rails' TypeError: wrong argument type Class (expected Module) Rspec V3失败/错误:需要'rspec/rails'类型错误:错误的参数类型类(预期模块)Rspec V3 【发布时间】:2018-08-11 21:12:09 【问题描述】:

我了解,此错误很常见,但不知何故我无法找出问题所在,似乎与路径有关。 我也关注了this 的问题,但到目前为止还没有运气。

宝石文件

group :development, :test do
  gem 'faker'
  gem 'rspec-rails', '~> 3.7'
  gem 'factory_bot_rails', '~> 4.0'
  gem 'shoulda-matchers', '~> 3.1'    
end

spec/factories/user.rb

FactoryBot.define do
  factory :user do
    name "Andy"
  end
end

spec/models/user_spec.rb

require 'rails_helper'

RSpec.describe User, type: :model do

it "should be invalid without phone number" do
    user = build(:user)
    user.phone = nil
    expect(user).not_to be_valid
  end
end

spec/support/factory_bot.rb

RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end

.rspec

--require spec_helper
--color

rails_helper.rb

require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'support/factory_bot'
...
...

我正在运行 bundle exec rspec spec/models/user_spec.rb

我尝试过的事情:

    rails_helper.rb 下方的require 'rspec/rails' 行中添加了require 'support/factory_bot'rails generate rspec:install(执行成功) rspec --init(执行成功) rake db:test:prepare(执行成功) 将 user_spec.rb 中的 require 'rails_helper' 更改为 require 'spec_helper',但运行后出现错误 NameError: uninitialized constant User

这是完整的跟踪:

An error occurred while loading ./spec/models/user_spec.rb.
Failure/Error: require 'rspec/rails'
TypeError:
  wrong argument type Class (expected Module)
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:181:in `include'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:181:in `block in add_template_helper'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:181:in `module_eval'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:181:in `add_template_helper'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:110:in `block in helper'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:109:in `each'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/abstract_controller/helpers.rb:109:in `helper'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionpack-5.0.6/lib/action_controller/railties/helpers.rb:17:in `inherited'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionview-5.0.6/lib/action_view/test_case.rb:11:in `<class:TestCase>'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionview-5.0.6/lib/action_view/test_case.rb:10:in `<module:ActionView>'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/actionview-5.0.6/lib/action_view/test_case.rb:8:in `<top (required)>'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `block in require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:259:in `load_dependency'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `block in require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:259:in `load_dependency'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `block in require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:259:in `load_dependency'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `block in require'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:259:in `load_dependency'
# /Users/Imi/.rvm/gems/ruby-2.4.0/gems/activesupport-5.0.6/lib/active_support/dependencies.rb:293:in `require'
# ./spec/rails_helper.rb:7:in `<top (required)>'
# ./spec/models/user_spec.rb:1:in `require'
# ./spec/models/user_spec.rb:1:in `<top (required)>'
No examples found.


Finished in 0.00789 seconds (files took 2.75 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

【问题讨论】:

请显示您的 rails_helper 文件的内容。 另外,完整的堆栈跟踪也会有所帮助。 @moveson 添加了 rails_helper.rb 错误与哪一行有关?你能显示堆栈跟踪吗? @Imran 在我的例子中,我创建了一个辅助模块 class 而不是 module 【参考方案1】:

我搞定了。

除了一件事,一切都在原地。 module 替换为class 我有一个lib 和一个helper 模块导致错误。刚刚用class 替换了module,现在它像黄油一样运行。

【讨论】:

以上是关于失败/错误:需要'rspec/rails'类型错误:错误的参数类型类(预期模块)Rspec V3的主要内容,如果未能解决你的问题,请参考以下文章

Rspec,Rails:如何测试控制器的私有方法?

如何在 RSpec (rails) 中创建或指定关联?

未初始化的常数 Rspec

ruby 具有期望语法的Rspec Rails备忘单(包括capybara匹配器)

未捕获的错误:模块解析失败:您可能需要适当的加载程序来处理此文件类型

在某些 RSpec rails 请求示例中测试 HTTP 状态代码,但在其他示例中测试引发异常