用户模型默认管理员值的rails规范未通过 - 为什么?

时间:2015-05-06 15:10:59

标签: ruby-on-rails rspec devise default-value modelattribute

我有以下问题:我正在做一个项目,我应该修复一些损坏的代码才能进入Rails研讨会。我应该让User模型规范通过。规范检查admin属性的默认值,如下所示:

it "by default isn't admin" do
    expect(User.new).to_not be_admin
  end
编辑:我应该澄清,我没有编写规范 - 应用程序作者做了它,我只是想通过它。而且我不确定我是否可以根据建议重写它。

迁移看起来像这样:

class AddAdminToUsers < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

因此,当我在控制台中创建新用户时,admin的默认值确实为false,方法User.new.admin?也返回false。这就是新用户的样子:

<User id: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, admin: false, firstname: nil, lastname: nil>

尽管如此,规范还没有通过。失败消息是:

Failure/Error: expect(User.new).to_not be_admin
       expected #<User:0xbe073dc> to respond to `admin?`

我错过了什么?哦,这是我的用户模型:

class User < ActiveRecord::Base
  attr_accessor :firstname, :lastname
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  has_many :reviews
  has_many :products
  validates :firstname, presence: true
  validates :lastname,  presence: true
end

3 个答案:

答案 0 :(得分:0)

使用rspec是方法,be_(某事)不会产生实体。(某事)?

it "by default isn't admin" do
  user = User.new
  expect(user.admin).to be_false
end

RSpec be method

答案 1 :(得分:0)

您的测试期望User有一个admin?方法,但它看起来不像。您应该重写测试expect(User.new.admin).to be_false

否则,您可以将方法添加到模型中:

class User < ActiveRecord::Base
...
  def admin?
    self.role == "admin"
  end
end

答案 2 :(得分:0)

在尝试了admin?方法的许多变体后,我将其变为

def admin?
end

不知怎的,它过去了。为什么默认的admin?方法没有工作,我必须明确地做 - 不知道。