Capybara+Selenium:如何在集成测试代码中初始化数据库并使其在 Rails 应用程序中可见?

2024-05-01

配置:使用 RSpec、Capybara、Selemium 驱动程序、SQLite 数据库对 Rails 项目进行集成测试。

情况:我与 Capybara 和默认的rack_test 驱动程序进行了一些集成测试。他们直接在数据库中创建用户注册(针对 Devise gem)。然后他们像用户一样登录并使用 Capybara DSL 测试场景。

Problem:我尝试将驱动程序更改为 Selenium 来测试 JavaScript 代码。现在测试失败,因为应用程序看不到测试创建的用户注册。

调查:看起来 Selenium 驱动程序与事务的工作方式不同,因此测试中所做的更改在 Web 应用程序中是不可见的。可能的解决方案包括:

config.use_transactional_fixtures = false 
DatabaseCleaner.strategy = :truncation

对我来说工作解决方案来自here https://github.com/lailsonbm/contact_manager_app and here http://snippets.dzone.com/posts/show/13057:

  • 添加到 Gemfilegem database_cleaner
  • 创建文件spec/support/javascript.rb有内容

`

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.strategy = :transaction
    DatabaseCleaner.clean_with :truncation
  end

  config.before(:each) do
    if example.metadata[:js]
      Capybara.current_driver = :selenium
      DatabaseCleaner.strategy = :truncation
    else
      DatabaseCleaner.strategy = :transaction
      DatabaseCleaner.start
    end
  end

  config.after(:each) do
    Capybara.use_default_driver if example.metadata[:js]
    DatabaseCleaner.clean
  end
end

`

尽管这对我的控制器和模型规格执行时间造成了轻微的影响(从 40 到 43 秒)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Capybara+Selenium:如何在集成测试代码中初始化数据库并使其在 Rails 应用程序中可见? 的相关文章

随机推荐