【发布时间】:2018-04-11 20:17:26
【问题描述】:
我的应用要求用户通过 Google OAuth 登录。当我运行多个测试时,Google OAuth 不会重置会话,因此在第一次测试之后,所有后续测试都将访问我们的站点并且已经登录。
我最近发现了这个问题并遇到了 3 个场景(我已经包含了基本示例)。每个场景首先让用户导航到我们的登录页面,单击将用户发送到 Google OAuth 的按钮,登录然后验证 url。
第一个场景只是导航到我们的网站并登录。结果是第一个测试通过了,但所有后续测试都预计会到达 Google OAuth 登录页面,但已登录:
feature 'All Films Page' do
context 'user is logged in as an Admin role' do
before(:each) do
Capybara.reset_sessions!
visit('/')
app.google_signin.sign_into_app('admin')
end
scenario '1' do
expect(page).to have_current_path('/films')
end
scenario '2' do
expect(page).to have_current_path('/films')
end
end
end
第二种情况添加了“reset_sessions!”用于谷歌 OAuth。这样做的结果是,在第一次测试后,用户到达了 Google OAuth,但之前的用户是一个可选选项,因为之前已登录。
feature 'All Films Page' do
context 'user is logged in as an Admin role' do
before(:each) do
visit('https://accounts.google.com')
Capybara.reset_sessions!
visit('/')
app.google_signin.sign_into_app('admin')
end
scenario '1', :integration do
expect(page).to have_current_path('/films')
end
scenario '2', :integration do
expect(page).to have_current_path('/films')
end
end
end
第三个场景添加了两个“reset_sessions!”用于谷歌 OAuth。这将创建每个测试的预期结果,并重置其会话。
feature 'All Films Page' do
context 'user is logged in as an Admin role' do
before(:each) do
visit('https://accounts.google.com')
Capybara.reset_sessions!
visit('/')
visit('https://accounts.google.com')
Capybara.reset_sessions!
visit('/')
app.google_signin.sign_into_app('admin')
end
scenario '1', :integration do
expect(page).to have_current_path('/films')
end
scenario '2', :integration do
expect(page).to have_current_path('/films')
end
end
end
【问题讨论】:
标签: ruby-on-rails oauth rspec capybara