设计功能测试而不是重定向到sign_in页面

时间:2016-05-26 17:02:21

标签: ruby-on-rails rspec devise capybara

我注意到,当用户没有登录并且他们没有被重定向到登录页面并且我试图理解原因时,仅在功能测试中会出现一些奇怪的行为。我正在使用poltergeist作为javascript驱动程序。

以下是几个例子:

# works as expected
it 'redirects to sign_in page when not logged in' do
  get :index, {}
  expect(response).to eq('/users/sign_in')
end

# does not redirect to '/users/sign_in'
it 'should redirect to the user sign in page' do
  visit '/'
  expect(page.current_path).to redirect_to('/users/sign_in')
end

有没有人知道为什么设计没有重定向到功能测试中的sign_in页面?

1 个答案:

答案 0 :(得分:0)

你不能将redirect_to与Capybara一起使用--Capybara不提供有关页面是否重定向的数据,只是提供它作为字符串的URL。你可能想要

expect(page).to have_current_path('/users/sign_in')

注意:尝试检查相同内容的一种天真的方法是执行expect(page.current_path).to eq('/users/sign_in'),但会立即检查current_path,这会导致与支持JS的驱动程序一起使用时出现片状测试,因为这些驱动程序中的大多数操作都可以异步发生。使用have_current_path匹配器会增加等待/重试行为,因此是正确的使用方法。

相关问题