一尘不染

使用Selenium作为WebDriver进行Rails集成测试-无法sign_in

selenium

嗨,
我有一个非常简单的集成测试

require 'integration_test_helper'
Capybara.current_driver = :rack_test

class AdminSignsInTest < ActionDispatch::IntegrationTest

  test 'can sign in' do
    email = 'bob@example.com'
    password = 'secret_password'
    Admin.create email: email, password: password

    visit new_admin_session_path
    fill_in 'admin_email', with: email
    fill_in 'admin_password', with: password

    click_button I18n.t('devise.views.sign_in')

    assert_equal I18n.t('devise.sessions.signed_in'), find('p.notice').text
  end
end

当我将Capybara驱动程序设置为rack_test测试通过时,但是当我将其设置为时selenium,它将失败,并显示“电子邮件或密码无效”。在登录页面上(我正在使用Devise)。我究竟做错了什么?


阅读 243

收藏
2020-06-26

共1个答案

一尘不染

当我将Capybara驱动程序设置为rack_test时,测试通过,但是当我将其设置为硒时,它将失败,并显示“无效的电子邮件或密码”。在登录页面上(我正在使用Devise)。我究竟做错了什么?

您必须检查一下use_transactional_fixtures。使用事务性固定装置时,因为Selenium(或任何 外部
驱动程序,不是Rack::Test)无法访问已写入数据库的信息。(因为交易尚未“提交”)

您可以通过以下方法在自己的内部解决此问题test_helper.rb

class ActionDispatch::IntegrationTest
  self.use_transactional_fixtures = false
end

您可能希望同时查看诸如Database
Cleaner之类的内容
,因为如果没有事务处理固定装置,数据库将变得不整洁。

2020-06-26