【发布时间】:2013-09-19 17:26:21
【问题描述】:
我现在正在学习 rspec,想通过“设计”来测试我的能力课程,代码如下:
class Ability
include CanCan::Ability
def initialize(user)
@user = user || User.new
我当前的 rspec 如下所示:
require 'spec_helper.rb'
describe Ability do
let(:user) { User.new }
let(:ability) { Ability.new(user) }
it 'should be an instance of Abiliy' do
# expect(@user).to be_an_instance_of User # also works
ability.should be_an_instance_of Ability
# passes test
end
it "should include CanCan::Ability" do
expect(:ability).to include(CanCan::Ability)
# NoMethodError: undefined method `include?'
end
it 'should initialize with a User' do
pending
end
it 'should have @user instance variable' do
ability.user.should == User
# NoMethodError: undefined method `user'
end
谁能提供一个例子。我做了一个研究,但没有成功....
【问题讨论】:
-
在检查包含(第一个 NoMethodError)时应该使用
should be_a_kind_of,在检查(第 2 种情况)的实例时应该使用should be_instance_of... -
对于第二种情况,您还应该将
attr_accessor :user定义为Ability或定义user方法,返回@user -
对第二条评论:我需要
attr_accessor :user吗?还是在initialize(user)方法中就足够了?这样做有什么理由?目前我对此的测试如下:ability.instance_variable_get(:@user).should be_an_instance_of User -
不,
initialize还不够。
标签: ruby ruby-on-rails-3 rspec devise