如何在 capybara RSpec 测试中跟随重定向到子域?
How to follow redirect to subdomain in capybara RSpec test?
我想测试身份验证机制,成功后重定向到子域,例如:
1.登录表单位于http://example.com
2. 用户填写表格,如果凭据正确,则重定向到 http://zone.example.com
.
我的控制器操作如下所示:
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
登录在开发中有效,但测试失败,因为 Capybara 不遵循重定向到子域。
这是我用 Rails 5 和 Capybara Chrome 驱动程序完成的:
Rails.application.routes.default_url_options[:host] = 'lvh.me'
我想测试身份验证机制,成功后重定向到子域,例如:
1.登录表单位于http://example.com
2. 用户填写表格,如果凭据正确,则重定向到 http://zone.example.com
.
我的控制器操作如下所示:
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
登录在开发中有效,但测试失败,因为 Capybara 不遵循重定向到子域。
这是我用 Rails 5 和 Capybara Chrome 驱动程序完成的:
Rails.application.routes.default_url_options[:host] = 'lvh.me'