【问题标题】:How to use the test database with Capybara?如何在 Capybara 中使用测试数据库?
【发布时间】:2012-01-29 13:23:53
【问题描述】:

我正在使用 RSpec、Spork、Capybara 和 Capybara Mechanic 为使用 Facebook 连接的注册路径编写集成测试。它通过注册正确导航,但新用户是在我的开发数据库而不是测试数据库中创建的。

RSpec 设置为使用测试环境,我已经确认我在我的规范中运行的任何模型方法都命中了测试数据库,但所有 UI 操作都命中了开发。

这是我的测试:

it "go through registration path" do
  print "RAILS_ENV: #{Rails.env}\n" # correctly prints 'test'
  print "1) #{User.count}\n" # correctly shows the user count in my test database (zero)

  Capybara.current_driver = :mechanize

  visit root_path
  click_link "register"

  # Fill in Facebook Connect form
  fill_in 'email', :with => "bob@example.com"
  fill_in 'pass', :with => "password"
  click_button "Log In"

  print "2) #{User.count}\n" # still shows zero users in the test database

end

在那次测试之后,我可以查看我的开发数据库,​​并且在那里创建了新用户。

我也尝试过设置 database_cleaner,但没有帮助。

有人知道我需要做什么才能让 capybara 访问测试数据库吗?

导轨 3.1.3

rspec 2.7.0

spork 0.9.0

水豚 1.1.0

水豚机械化 0.3.0.rc3

【问题讨论】:

  • 您最终自己解决了这个问题吗?我在正在开发的应用程序中遇到了类似的问题。我正在尝试使用测试中的记录登录,但它说该记录不存在。所以我认为它与使用开发环境有关,但是将记录添加到开发中表示它也不存在。所以我不确定 Capybara 是否使用了与 rspecs 测试环境完全不同的数据库/环境。
  • 查看我的解决方法。你是如何创建用户的?我正在使用插入测试数据库的 FactoryGirl。
  • 我也使用 FactoryGirl。正在按预期在测试数据库中创建记录。当我将驱动程序更改为 Selenium 或 Webkit 并且浏览器需要与他们不返回的记录进行交互时......我也尝试像你的答案一样设置服务器设置,因为我认为我的 POW 配置导致它运行在浏览器中处于开发模式,但事实并非如此。
  • 您如何测试您的记录实际上是否在正确的数据库中?您是否尝试从测试中打印 ENV["RAILS_ENV"] 和 DB 记录到控制台?您的应用程序是否与重定向回您的本地主机的任何第三方站点进行交互?我们使用 FB 连接,它重定向回 l​​ocalhost:3000 必须为我的测试进行更新,因为所有测试数据都在 localhost:7000。我唯一能想到的另一件事是给 Capybara Google 小组发电子邮件或写一个问题在他们的 Github 页面上。
  • 我的问题是没有将事务装置设置为 false...

标签: ruby-on-rails-3 rspec2 capybara


【解决方案1】:

问题是我有一个单独的开发服务器与测试并行运行,并且测试默认使用相同的地址/端口。我通过将以下内容添加到 spec_helper.rb 解决了这个问题,因此 Capybara 将使用不同的端口。

Capybara.run_server = true 
Capybara.server_port = 7000
Capybara.app_host = "http://localhost:#{Capybara.server_port}" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多