Capybara webkit 的数据库清理问题

2024-02-17

我正在使用 Cucumber 来编写集成测试数据库清理器 https://github.com/bmabey/database_cleaner保持我的数据库干净。一切都很完美,因为我的测试不需要 JavaScript。

我可以使用最后的测试通过水豚网络套件 https://github.com/thoughtbot/capybara-webkit,但是我的数据库根本没有被清理。

这是我的功能/支持/env.rb file:

require 'simplecov'
SimpleCov.start 'rails'
require 'cucumber/rails'

Capybara.default_selector = :css
Capybara.javascript_driver = :webkit

begin
  require 'database_cleaner'
  require 'database_cleaner/cucumber'
  DatabaseCleaner[:active_record].strategy = :transaction
rescue NameError
  raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
end


Before do
  DatabaseCleaner.start
end

After do |scenario|
  DatabaseCleaner.clean
end

我尝试过类似的东西this http://rainux.github.io/2011/07/23/configure-capybara-webkit-to-run-acceptance-specs-with-javascript-ajax/检查水豚使用哪个驱动程序,但它不起作用。我还尝试了第三部分中提到的 hack这个帖子 http://blog.plataformatec.com.br/2011/12/three-tips-to-improve-the-performance-of-your-test-suite/但后来一切都不起作用......

我真的不知道如何实现这一点,任何帮助将不胜感激。

提前致谢。


快速回答:

配置您的 JavaScript 测试以使用截断而不是事务:

DatabaseCleaner.strategy = :truncation

更长的解释:

事务策略不适用于 JavaScript 测试,因为大多数支持 JavaScript 的水豚驱动程序在与应用程序代码不同的线程中运行测试。

以下是该过程的基本概要:

  • Capybara 在后台线程中使用 webrick 或 Thin 启动您的机架应用程序。
  • 主线程设置驱动程序,提供机架应用程序运行的端口。
  • 您的测试要求驱动程序与应用程序交互,这会导致伪造的 Web 浏览器对您的应用程序执行请求。

这是必要的,因为很难制作一个针对内存中 Rack 应用程序执行请求的假浏览器。在某些数据库驱动程序中,从多个线程对同一事务执行查询是不安全的。

最终结果是您需要在测试代码中提交事务,以便数据在应用程序代码中可见。解决此问题的最简单方法是使用截断数据库清理策略。

您可以配置 RSpec(或 Cucumber)以将事务用于除 JavaScript 测试之外的所有内容。这对于非 JavaScript 测试来说会更快,同时仍然适用于 JavaScript 测试。

Avdi Grimm 有一篇关于这个主题的很好的博客文章,详细描述了解决方案:http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/ http://devblog.avdi.org/2012/08/31/configuring-database_cleaner-with-rails-rspec-capybara-and-selenium/

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

Capybara webkit 的数据库清理问题 的相关文章

  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • 基于数据库的动态Rails路由

    我正在使用 Rails 2 3 构建一个包含各种模块 博客 日历等 的 CMS 每个模块都由不同的控制器处理 并且工作得很好 我遇到的唯一问题是根 URL 根据用户选择的配置 此默认 URL 应显示不同的模块 即不同的控制器 但我必须确定正
  • 使用 Devise 嵌套资源 - Rails3

    我正在尝试设置一个配置文件控制器来与设备注册成员一起使用 我已经创建了Profile模型和控制器并添加了one to one relationship通过增加belongs to member to my 配置文件 rb模型和has one
  • Heroku 上的“PG::错误 - 数字字段溢出”

    我构建了一个应用程序来查询 Google Analytics 的过去 7 天的数据 一切都在本地进行 在 Heroku 上 该过程运行顺利 直到它尝试获取今天日期的数据 然后我收到以下错误 2012 10 29T02 32 02 00 00
  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 如何使用 rspec 测试传递到 Rails 3 中的控制器的参数?

    我们的代码 describe GET show do it assigns the requested subcategory as subcategory do subcategory Subcategory create valid a
  • 在运行时在 Rails 中向模型添加列(无需附加表)

    我试图让我的网络应用程序的管理员能够向模型添加一些新字段 该模型称为 Artwork 我想在运行时添加一个 test column 列 我只是在测试 所以我添加了一个简单的链接来做到这一点 它当然是参数化的 我设法通过迁移来做到这一点 de
  • Bootstrap Typeahead 仅显示第一个字母

    我很难让 Twitter Bootstrap 的 Typeahead 正常工作 Typeahead 仅匹配输入的第一个字母 我在预输入框中的结果看起来像 n n n N N n 我的代码是 有人可以帮忙吗 检查 html 中输出的数据源属性
  • 将 ERB 与 Handlebars 模板结合使用

    我有一个使用 ajax 创建新标签的模式 它使用 Tags 参数执行 POST 方法 而无需重新充电视图 因此 我希望根据所选的 price type 参数来呈现一个或另一个价格 div 我使用 Handlebars 所以我想这不是 rub
  • Ruby on Rails:如何使用 JSONPath 访问(并保存到数据库)JSON 数组中的嵌套对象/属性?

    我正在尝试将 JSON 对象数组中的数据播种到我的数据库中 我有两个单独的数据库表 属性和单位 一个属性有许多单位 我已经能够通过 API 请求 JSON 数据 然后将其播种到数据库 成功地对属性信息 属性模型 执行此操作 但是 Valua
  • 不使用 RVM 时的 Cron +

    我使用的是RVM环境 RUby 版本 2 1 2 导轨 4 1 1 schedule rb every 1 minute do runner note send mail end I used whenever update crontab
  • 关于空 own_to 关联的最佳实践

    想象一下以下情况 我有一个dog模型和一个house模型 一只狗可以属于一个房子 一个房子可以有很多只狗 所以 Class Dog lt ActiveRecord Base belongs to house end Class House
  • Rails 3.1 中的嵌套表单

    我在嵌套表单方面遇到问题 rails 3 1 在应该渲染 fields for 块时不渲染 fields for 块 例如 在编辑现有记录时 由于我对自己的英语不够自信 我制作了一个小示例应用程序 新行动 def new manga Man
  • 无法在 Windows 7 上安装 Rmagick 和 Imagemagick

    当我跑步时gem install rmagick 2 13 1 gem从 rmagick 2 13 1 gem 所在的目录中 我收到一个错误 指出它无法构建 gem 本机扩展 下面显示 c Ruby192 bin ruby exe extc
  • :autosave 忽略了 has_many 关系——我错过了什么?

    我有两门课 class Collection lt ActiveRecord Base has many items autosave true end class Item lt ActiveRecord Base belongs to
  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • ActiveRecord::Fixture::FixtureError:表“books”没有名为“loves”的列

    奇怪的 Rails 问题 我有一个Book实体和用户可以Love a book 我的所有其他模型都很好并且通过了所有测试 但是在生成新模型之后Love模型和设置装置时 我突然遇到大量这些错误 ActiveRecord Fixture Fix
  • 我可以在同一台 Apache 服务器上运行 Python Django 和 Ruby 吗?

    我正在使用 ModWSGI 在 Apache2 上运行 Python Django 并且我想在同一台服务器上运行 Ruby on Rails 可以这样做吗 我读到 Passenger for Ruby on Rails 也可以支持 Djan
  • Rails 4 - 如何在活动记录查询中为includes()和joins()指定别名

    我如何给出别名 例如includes 给出如下 用户 活动记录模型 Student 活动记录模型 继承自User STI Teacher 活动记录模型 继承自User STI 项目 活动记录模型 这里有一些例子 第一个案例 更多性传播感染协

随机推荐