我有以下问题:我正在做一个项目,我应该修复一些损坏的代码才能进入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
答案 0 :(得分:0)
使用rspec是方法,be_(某事)不会产生实体。(某事)?
it "by default isn't admin" do
user = User.new
expect(user.admin).to be_false
end
答案 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?
方法没有工作,我必须明确地做 - 不知道。