【问题标题】:rspec test using regular database not test databaserspec 测试使用常规数据库而不是测试数据库
【发布时间】:2011-07-06 11:32:41
【问题描述】:

我正在使用 Rspec、webrat、selenium rc 进行测试。

我正在尝试使用 selenium 和 rspec 进行集成测试。

我刚刚查看了我的开发数据库,​​发现我的集成测试使用的是我的开发数据库,​​而不是我的测试数据库。

我如何配置 rails、rspec 和 selenium 以使用我的测试数据库。

我所有的其他测试似乎都在使用我的测试数据库。

【问题讨论】:

    标签: ruby-on-rails-3 rspec2


    【解决方案1】:

    你有没有这样的台词

      ENV["RAILS_ENV"] ||= 'test'
    

    在你的 spec_helper.rb 中? 如果您添加/替换它是否会强制使用测试数据库

    ENV["RAILS_ENV"] = 'test'
    

    这可能是您昨天问题的根源 - 重新电子邮件验证??

    【讨论】:

    • 嘿 Chrispanda 我更改了我的代码以匹配您上面的代码。这并没有改变对开发数据库的写入,但我认为如果我从我的系统运行它,这就是 selenium 的工作方式。由于测试正在通过 Firefox,因此它无法写入测试数据库。但是我通过清除我的数据库来解决唯一性问题。这就是问题所在,我认为它正在写入我的测试数据库,所以我会执行 rake db:test:prepare 而不是 rake db:reset。啊。谢谢。
    • 你知道如何在每次测试后清除我的开发数据库吗?
    • @MarnenLaibow-Koser - rails 应用程序可能使用由另一个应用程序填充的外部数据源,而 rails 应用程序只是该数据的接口。使用测试数据库并不总是合适的。
    • David:如果首先使用数据库是合适的,那么拥有测试数据库总是合适的。如果 Rails 应用程序只使用外部数据源,那么它可能一开始就不需要数据库(因此将应用不同的测试策略)。
    【解决方案2】:

    在将 Rails 2 应用程序移植到 Rails 3 时,我遇到了同样的问题(针对开发而不是测试环境运行 rspec 测试)。换行

    ENV["Rails.env"] ||= 'test'
    

    ENV["RAILS_ENV"] ||= 'test'
    

    在 spec_helper.rb 中修复了我的问题。

    我意识到 RAILS_ENV 已被弃用,取而代之的是 Rails.env,并怀疑在端口中拖了一些不好的东西,迫使我进行此更改。

    这里也对 RAILS_ENV 和 Rails.env 进行了很好的讨论,这可能会提供更多见解:

    Correct Ruby on Rails 3 replacement for ENV["RAILS_ENV"] ||= 'production'?

    【讨论】:

      【解决方案3】:

      根据 rspec-rails gem 文档,将 rspec-rails gem 放入 Gemfile 的开发和测试组。这是因为 test rake 任务在切换到测试环境之前先加载开发环境。

      group :development, :test do
        gem 'rspec-rails'
      end
      

      参考:https://github.com/rails/rails/issues/7175https://github.com/rails/rails/issues/8591 -- rspec 加载开发环境

      【讨论】:

        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多