ruby-on-rails - Rspec 测试 'cancan' 。未初始化的常量能力(NameError)

标签 ruby-on-rails rspec

我尝试测试“cancan”gem。但是当我运行 rspec 时,shell 向我显示错误

uninitialized constant Ability (NameError)

这是我的spec_ability.rb

require 'spec_helper'
require "cancan/matchers"

describe Ability do
  it "user has ability" do
    user = FactoryGirl.create(:user)
    ability = Ability.new(user)
    expect(ability).to be_able_to(:destroy, Project.new(:user => user))
  end
end

这是模型能力.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.admin?
      can :manage, :all
    else
      can :read, :all
    end
  end
end

完整跟踪

/home/weare138/timonin/spec/models/ability_spec.rb:4:in `<top (required)>': uninitialized constant Ability (NameError)
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `block in load_spec_files'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `each'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load_spec_files'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:96:in `setup'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:84:in `run'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:69:in `run'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:37:in `invoke'
    from /home/weare138/.rvm/gems/ruby-2.1.5/gems/rspec-core-3.1.7/exe/rspec:4:in `<top (required)>'
    from /home/weare138/.rvm/gems/ruby-2.1.5/bin/rspec:23:in `load'
    from /home/weare138/.rvm/gems/ruby-2.1.5/bin/rspec:23:in `<main>'
    from /home/weare138/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `eval'
    from /home/weare138/.rvm/gems/ruby-2.1.5/bin/ruby_executable_hooks:15:in `<main>'

用户是由工厂'users.rb'生成的

如何解决?

抱歉我的英语不好

最佳答案

最简单的解决办法确实是require 'rails_helper'而不是require 'spec_helper'

这将加载 Rails 内容,并将 Ability 类添加到加载路径。然后在spec中使用时可以自动加载。

或者,您可以在规范中手动加载能力类:

require_relative '../../app/models/ability'

关于ruby-on-rails - Rspec 测试 'cancan' 。未初始化的常量能力(NameError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27580136/

相关文章:

ruby-on-rails - 将图像文件保存到 Rails 中的数据库

ruby-on-rails - Ruby 定义方法返回使用参数的 proc

ruby-on-rails - 如何使用 rspec 测试 ActionMailer Deliver_later

ruby - 我可以给嵌套 RSpec 匹配器起别名吗?

ruby-on-rails - Rspec + savon + vcr 不录制

ruby-on-rails - Rails 3.1和jQuery mobile : Best way to organize your JS & CSS while considering the asset pipeline?

ruby-on-rails - 如何测试 ElasticSearch Logstash 和 Kibana

ruby-on-rails - Rails 关联和表单

ruby-on-rails - 设计和 Rspec 测试集成

rspec - 使用工厂女孩创建 has_many 关系的特征