测试设计after_inactive_sign_up_path_for确认重定向

时间:2017-04-02 02:56:18

标签: ruby-on-rails rspec devise capybara devise-confirmable

我的设计用户是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?我知道表单接受输入是因为我的理智检查用户存在。

1 个答案:

答案 0 :(得分:0)

很可能您的用户创建失败,无论是由于现有用户还是密码不符合最低安全要求等,我都不确定。点击后输出page.html应该会显示任何验证错误,或者您的test.log也应该显示。

此外,click_on可以是异步的(当使用支持JS的驱动程序时),因此您应该交换测试的最后两行,因为have_current_path将等待页面更改发生,这意味着用户创建已完成。这不会解决您当前的问题,但是在运行直接数据库查询之前使用Capybara匹配器确保操作已经完成将减少您将来的潜在瑕疵(但请注意,直接数据库查询通常是错误的代码特征测试中的气味)。