在编写请求规范时,如何设置会话和/或存根控制器方法?我正在尝试在我的集成测试中删除身份验证 - rspec/requests
这是一个测试的例子
require File.dirname(__FILE__) + '/../spec_helper'
require File.dirname(__FILE__) + '/authentication_helpers'
describe "Messages" do
include AuthenticationHelpers
describe "GET admin/messages" do
before(:each) do
@current_user = Factory :super_admin
login(@current_user)
end
it "displays received messages" do
sender = Factory :jonas
direct_message = Message.new(:sender_id => sender.id, :subject => "Message system.", :content => "content", :receiver_ids => [@current_user.id])
direct_message.save
get admin_messages_path
response.body.should include(direct_message.subject)
end
end
end
Run Code Online (Sandbox Code Playgroud)
帮助者:
module AuthenticationHelpers
def login(user)
session[:user_id] = user.id # session is nil
#controller.stub!(:current_user).and_return(user) # controller is nil
end
end …Run Code Online (Sandbox Code Playgroud) 我在spec/helpers/session.rb中找到了这个简单的帮助器:
def sign_in user
session[:remember_token] = user.remember_token
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在规范中使用它时出现错误.下列:
context 'when user is is signed in' do
before do
sign_in user
request
end
specify{ expect(flash[:success]).to eq "Signed out successfully" }
end
Run Code Online (Sandbox Code Playgroud)
给我:
Failure/Error: sign_in user
NameError:
undefined local variable or method `session' for #<RSpec::ExampleGroups::AdminArea::Authentication::GuestVisitsRoot:0x00000004f835f0>
Run Code Online (Sandbox Code Playgroud)
那么如何从规范内部操纵会话呢?可能吗?