我想测试一个不同的控制器,无论是登录用户的第一个请求还是后续用户。不同的代码如下:
before_filter :init_guest_user
def init_guest_user
@guest_user ||= User.find(session[:guest_user_id] ||= create_guest_user.id)
rescue ActiveRecord::RecordNotFound # If session[:guest_user_id] is invalid
session[:guest_user_id] = nil
init_guest_user
end
我在我的规范中尝试了以下内容:
it 'finds the guest user for a subsequent request' do
get :index
expect {
get :index
}.not_to change(User, :count)
end
这很好用。但是以下失败了:
it 'creates a new guest user if the previously existed one vanished' do
get :index
User.last.destroy
expect {
get :index
}.to change(User, :count).from(0).to 1
end
看来,@guest_user
在两个请求之间仍然存在,这不是我的预期。这是怎么回事?
答案 0 :(得分:1)
可能是因为@guest_user
已经初始化并且没有检查其他条件。我想这会起作用
def init_guest_user
@guest_user ||= User.find(session[:guest_user_id] ||= create_guest_user.id)
rescue ActiveRecord::RecordNotFound # If session[:guest_user_id] is invalid
session[:guest_user_id] = nil
@guest_user = nil
init_guest_user
end