2015-05-21 50 views
0

我想測試認證機制,一旦成功重定向到子域,例如: 1.登錄表單位於http://example.com 2.用戶填寫表單,如果憑證正確,則重定向到http://zone.example.com如何在水豚RSpec測試中遵循重定向到子域?

我控制器操作是這樣的:

def create_session 
    if User.authorize(params[:user]) 
    sign_in user 
    redirect_to root_url(subdomain: 'zone') 
    else 
    redirect_to "#{root_url}#email-login-modal?wrong_password=true" 
    end 
end 

集成測試:

context "logging in" do 
    before(:all) do 
     @password = 'test123456' 
    end 
    let(:user) {create(:user, password: @password)} 
    scenario "by email", js: true do 
     visit "/" 
     page.find("a[href='#email-login-modal']").click 
     within("#login-form") do 
     fill_in 'user_email', :with => user.email 
     fill_in 'user_password', :with => @password 
     find("button[type='submit']").click 
     end 
     expect(page).to have_content user.name 
    end 
end 

登錄工作在發展,但由於水豚並不遵循重定向至子站點測試失敗。

+0

你可以嘗試用request.base_url –

+0

謝謝@CaffeineCoder更換root_url,但我寫的控制器方法工作正常,沒有必要改變那裏的一切。唯一的問題是,水豚引擎在成功登錄(http://zone.example.com)後沒有遵循重定向到子域,而是停留在http://example.com(用戶授權正確),因爲我在調試器中驗證。 – MatFiz

+0

我知道,這就是爲什麼我說要替換代碼並嘗試。兩者幾乎都做同樣的事情。不同之處在於,root始終爲根url(不能改變),但是base_url可以被調用,而不管URL如何改變。我懷疑這是測試失敗的原因。嘗試不會造成太大的傷害,是嗎? :) –

回答

1

這爲我做使用Rails 5和水豚鉻司機:

Rails.application.routes.default_url_options[:host] = 'whatever.test'