如何测试需要当前会​​话的控制器操作?

时间:2013-03-26 07:37:38

标签: ruby-on-rails ruby ruby-on-rails-3 sinatra

我正在向Padrino的管理部分添加更多控制器,但我无法训练如何存根当前用户或与Factory Girl或Mocha的会话。

测试需要当前会​​话的控制器操作有什么好方法?

2 个答案:

答案 0 :(得分:0)

警告:我没有使用过Padrino,你没有给出任何你尝试过的代码,所以这是非常笼统和含糊的。


备选方案1

不要存根会话,而是使用像Capybara这样为您设置cookie jar的测试框架。使用RSpec shared_context与运行登录的beforeafter块。

我不记得Capybara的确切语法,我会让你去查阅,但它会是这样的:

shared_context "When logged in" do
  before do
    visit "/login"
    fill_in "username", user.name
    fill_in "password", user.password
    click "login!"
  end
  after do
    # log out…
  end
end

describe "Something that you need to be logged in for" do
  let(:user) { OpenStruct.new({name: "blah", password: "blurgh" }) }
  include "When logged in"
  before do
    visit "/only/authenticated/see/this"
  end
  subject { page }
  it { should be_ok }
  it { #… }
end 

备选方案2

使用Rack::Test,查看this answer

备选方案3

Here are the authentication helpers,因此您应该保留logged_in?以返回truecurrent_account以返回用户double(无论是来自FactoryGirl还是let或其他地方)。这样你的应用程序就不会要求会话提供信息。

答案 1 :(得分:0)

此解决方案似乎有效

def set_current_user(user)
    ApplicationController.stub(:current_user).and_return(user)
    session[:identity_id] = user.id
end