我的设计用户是Like.includes(:categories).references(:categories).group("categories.name").count
,我想在注册后测试用户是否被重定向到设计登录页面。它在我手动测试时有效,但在rspec / capybara功能规范中失败。我正在按照these说明设置重定向。
:confirmable
失败返回:
# registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
protected
def after_inactive_sign_up_path_for(_resource)
new_user_session_path # redirect to login
end
end
# registration_spec.rb
RSpec.describe 'registration process', type: feature do
it 'works' do
visit new_user_registration_path
fill_in 'Username', with: 'user123'
fill_in 'Email', with: 'user123@email.com'
fill_in 'Password', with: 'password123'
fill_in 'Password confirmation', with: 'password123'
click_on 'Sign up'
expect(User.find_by(username: 'user123')).not_to be_nil # sanity check
expect(page).to have_current_path(new_user_session_path) # failure here
end
end
似乎Failure/Error: expect(page).to have_current_path(new_user_session_path)
expected "/users" to equal "/users/sign_in"
# ./spec/features/registration_spec.rb:19:in `block (2 levels) in <top (required)>'
卡在帖子路径中,或者被错误地重定向到page
?我知道表单接受输入是因为我的理智检查用户存在。
答案 0 :(得分:0)
很可能您的用户创建失败,无论是由于现有用户还是密码不符合最低安全要求等,我都不确定。点击后输出page.html
应该会显示任何验证错误,或者您的test.log
也应该显示。
此外,click_on
可以是异步的(当使用支持JS的驱动程序时),因此您应该交换测试的最后两行,因为have_current_path将等待页面更改发生,这意味着用户创建已完成。这不会解决您当前的问题,但是在运行直接数据库查询之前使用Capybara匹配器确保操作已经完成将减少您将来的潜在瑕疵(但请注意,直接数据库查询通常是错误的代码特征测试中的气味)。