无法运行RSpec(未初始化的常量用户(NameError)

时间:2014-08-13 15:30:04

标签: ruby ruby-on-rails-4 rspec-rails

尝试运行bundle exec rspec spec / models / user_spec.rb但未能执行(参见下面的错误)。

user_spec.rb的内容:

require 'rails_helper'

describe User do
  pending "add some examples to (or delete) #{__FILE__}"
end

如果我删除最后3行,则完成0个示例和0个失败。但是,当最后3行存在时,它会生成错误

/spec/models/user_spec.rb:4:in `<top (required)>': uninitialized constant User (NameError)
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/configuration.rb:1057:in `load'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/configuration.rb:1057:in `block in load_spec_files'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/configuration.rb:1057:in `each'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/configuration.rb:1057:in `load_spec_files'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/runner.rb:97:in `setup'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/runner.rb:85:in `run'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/runner.rb:70:in `run'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/lib/rspec/core/runner.rb:38:in `invoke'
    from /var/lib/gems/1.9.1/gems/rspec-core-3.0.3/exe/rspec:4:in `<top (required)>'
    from /usr/local/bin/rspec:23:in `load'
    from /usr/local/bin/rspec:23:in `<main>'

似乎它并不知道用户是什么,并将其视为常量,而这实际上是一个模型。我已经在ruby沙箱中验证了我可以在数据库中创建新用户。有什么想法吗?


答案: 从.rspec中删除--warnings后(感谢kirti),目前的错误是关于水豚版本太低(需要2.2)。安装最新版本(修改gemfile和bundle install)后,rspec似乎正在正确执行。感谢大家的意见。

3 个答案:

答案 0 :(得分:17)

我遇到了同样的问题,这是因为rspec/rails_helper.rb没有在任何地方被调用。

我将其添加到.rspec文件中,因此我的文件看起来像这样

--color
--require spec_helper
--require rails_helper

这个并在spec/spec_helper.rb中向false添加警告为我解决了这个问题!

  config.warnings = false

答案 1 :(得分:1)

从.rspec删除--warnings后(感谢kirti),目前的错误是关于水豚版本太低(需要2.2)。安装最新版本(修改gemfile和bundle install)后,rspec似乎正在正确执行。感谢大家的意见。

答案 2 :(得分:1)

对我来说,问题是类的名称没有被正确调用,因为它位于另一个命名空间中。例如,我有:

RSpec.describe User do

  # ... some tests

end

我应该去的地方

RSpec.describe MyModule::User do

  # ... some tests

end

因为用户类是用 MyModule 模块定义的。