簡體   English   中英

如何測試需要當前會​​話的控制器動作?

[英]How to test controller actions that require a current session?

我在Padrino的admin部分添加了更多控制器,但無法鍛煉如何對當前用戶進行存根或與Factory Girl或Mocha進行會話。

測試需要當前會​​話的控制器操作的好方法是什么?

警告:我沒有使用過Padrino,並且您還沒有給出嘗試使用的任何代碼,因此這很籠統和模糊。


選擇1

不要存根會話,而要使用像Capybara這樣的測試框架來為您設置一個cookie罐。 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 ,看看這個答案

選擇3

這是身份驗證幫助器 ,因此您應該對logged_in?存根logged_in? 返回truecurrent_account以返回用戶雙倍值(無論是來自FactoryGirl還是let或任何地方)。 這樣,您的應用就不會從會話中索取信息。

此解決方案似乎有效

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM