【发布时间】:2014-08-13 15:30:03
【问题描述】:
尝试运行 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>'
它似乎不知道 User 是什么并将其视为一个常量,而这实际上是一个模型。我已经在 ruby 沙箱中验证了我可以在数据库中创建新用户。有什么想法吗?
回答: 从 .rspec 中删除 --warnings 后(谢谢 kirti),当前错误是关于 capybara 版本太低(需要 2.2)。安装最新版本(修改 gemfile 和 bundle install)后,rspec 似乎正在正确执行。谢谢大家的cmets。
【问题讨论】:
-
向我们展示您的用户模型
-
我想你确实有一个文件
app/models/user.rb里面有User类? -
是的 app/models/user.rb 包含一个空类:class User
-
只是一个术语说明:“模型”是 Rails 用于继承自类
ActiveRecord::Base的 Ruby 类的词。 Ruby 中所有以大写字母开头的变量都是常量,因此当您引用User时,Ruby 会查找具有该名称的常量。也就是说,class User < ActiveRecord::Base创建了一个作为 Rails 模型的 Ruby 类,并将其分配给常量User。 -
至于你的实际问题:
spec_helper.rb的内容是什么?您是否有确实运行的其他模型的规格?
标签: ruby ruby-on-rails-4 rspec-rails