我的规格如下。
it 'should login with correct user/password',
js: true, driver: :selenium do
visit new_user_session_path
fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password
click_on 'loginButton'
expect_current_path(home_path)
end
如果我删除driver: :selenium
,它就可以了。我认为这是因为事务的RSpec配置。因此,我添加了数据库清理程序并禁用了config.use_transactional_fixtures = false
。但是,它仍然失败了。我调试了Devise(设计-4.2.1 / l
ib / devise / strategies / database_authenticatable.rb)如下。
def authenticate!
resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash)
hashed = false
debugger
if validate(resource){ hashed = true; resource.valid_password?(password) }
remember_me(resource)
resource.after_database_authentication
success!(resource)
end
mapping.to.new.password = password if !hashed && Devise.paranoid
fail(:not_found_in_database) unless resource
end
检查后,我可以看到mapping.to.find_for_database_authentication(authentication_hash)
确实按用户返回用户。但是,validate(resource)
因硒而失败。我检查了更多,发现def self.compare(klass, hashed_password, password)
是根本原因(在设计4.2.1 / l
IB /色器件/ encryptor.rb)。
所以主要原因是它无法比较密码。我怀疑它与加密有关。有人可以帮忙吗?
答案 0 :(得分:0)
疯狂的时候,我找到了答案。问题出在Capybara Selenium,它不喜欢3号。让我解释一下。我的user.password是'12345678',代码只填写'1245678'
fill_in 'user_email', with: user.email
fill_in 'user_password', with: user.password
我尝试过不同的组合,例如'331','123'。他们都删除了3号。因此,我将测试密码更改为'abcd'并且它有效。以下是我在Gemfile.lock中的内容。
capybara (2.13.0)
rspec (3.6.0)
selenium-webdriver (3.4.3)