Ruby on rails 使用selenium作为webdriver的Rails集成测试-can';不要登录
你好Ruby on rails 使用selenium作为webdriver的Rails集成测试-can';不要登录,ruby-on-rails,selenium,integration-testing,Ruby On Rails,Selenium,Integration Testing,你好 我有一个非常简单的集成测试 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.cre
我有一个非常简单的集成测试
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
需要“集成\测试\助手”
当前驱动程序=:机架测试
类AdminSignsTest
当我将Capybara驱动程序设置为rack\u test
test passes时,但当我将其设置为selenium
时,由于登录页面上的“无效电子邮件或密码”而失败(我使用的是designe)。我做错了什么
当我将Capybara驱动程序设置为rack_test passes时,但当我将其设置为selenium时,由于登录页面上的“无效电子邮件或密码”而失败(我正在使用Desive)。我做错了什么
您必须检查使用事务性装置。使用事务性装置时,因为Selenium(或任何外部驱动程序,不是Rack::Test
)无法访问已写入数据库的信息。(由于交易尚未“提交”)
您可以在test\u helper.rb
中解决此问题,方法如下:
class ActionDispatch::IntegrationTest
self.use_transactional_fixtures = false
end
同时,您可能希望了解,如果没有事务固定装置,您的数据库将变得不整洁。来自:
您还需要DatabaseCleaner,因为事务性装置不适用于Selenium。将数据库_cleaner gem添加到Gemfile的:测试组,并将以下代码放入spec/support/database_cleaner.rb中:
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before :each do
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end
end
我发现mattwinder的答案是有效的,但我也不得不对这句话进行评论
config.use\u transactional\u fixtures=true
也在spec/spec_helper.rb中。仅仅在spec/support/database_cleaner.rb中覆盖它不足以让登录使用Selenium。很抱歉,我忘记了这个问题。这个问题已经不存在了。我花了一些时间试图修复它,发布了这个问题,第二天它就正常工作了。可能是忘了重启斯波克之类的蠢事。我应该试着删除这个问题吗?你是对的,那肯定是因为事务性问题。我正在使用共享连接黑客。除非你有任何异议,否则我很感激你的接受,我的回答仍然会帮助那些遭受类似问题的人。谢谢你,天哪!设置config.use\u transactional\u fixtures=false
将其修复,以便我可以运行selenium以及正常的Rack::测试。快乐地运行Rspec/Capybara:Selenium和Device/Warden login now(不必使用designe登录表单,而是使用Warden login_as()助手,以实现更快的测试。谢谢!请参阅Avdi Grimm的文章: