【问题标题】:How do I load seed.rb within a Rails test environment using RSpec?如何使用 RSpec 在 Rails 测试环境中加载 seed.rb?
【发布时间】:2010-12-03 07:43:07
【问题描述】:

我有以下种子.rb 文件:

State.create  [ 
  {:name => "Alabama", :abbreviation => "AL" }, 
  {:name => "Alaska", :abbreviation => "AK" }, 
  {:name => "Arizona", :abbreviation => "AZ" }, 
  {:name => "Arkansas", :abbreviation => "AR" }, 
  {:name => "California", :abbreviation => "CA" }, 
  {:name => "Colorado", :abbreviation => "CO" }, 
  {:name => "Connecticut", :abbreviation => "CT" }, 
  {:name => "Delaware", :abbreviation => "DE" }, 
  {:name => "District Of Columbia", :abbreviation => "DC" }, 
  {:name => "Florida", :abbreviation => "FL" }, 
  {:name => "Georgia", :abbreviation => "GA" }, 
  {:name => "Hawaii", :abbreviation => "HI" }, 
  {:name => "Idaho", :abbreviation => "ID" }, 
  {:name => "Illinois", :abbreviation => "IL" }, 
  {:name => "Indiana", :abbreviation => "IN" }, 
  {:name => "Iowa", :abbreviation => "IA" }, 
  {:name => "Kansas", :abbreviation => "KS" }, 
  {:name => "Kentucky", :abbreviation => "KY" }, 
  {:name => "Louisiana", :abbreviation => "LA" }, 
  {:name => "Maine", :abbreviation => "ME" }, 
  {:name => "Maryland", :abbreviation => "MD" }, 
  {:name => "Massachusetts", :abbreviation => "MA" }, 
  {:name => "Michigan", :abbreviation => "MI" }, 
  {:name => "Minnesota", :abbreviation => "MN" }, 
  {:name => "Mississippi", :abbreviation => "MS" }, 
  {:name => "Missouri", :abbreviation => "MO" }, 
  {:name => "Montana", :abbreviation => "MT" }, 
  {:name => "Nebraska", :abbreviation => "NE" }, 
  {:name => "Nevada", :abbreviation => "NV" }, 
  {:name => "New Hampshire", :abbreviation => "NH" }, 
  {:name => "New Jersey", :abbreviation => "NJ" }, 
  {:name => "New Mexico", :abbreviation => "NM" }, 
  {:name => "New York", :abbreviation => "NY" }, 
  {:name => "North Carolina", :abbreviation => "NC" }, 
  {:name => "North Dakota", :abbreviation => "ND" }, 
  {:name => "Ohio", :abbreviation => "OH" }, 
  {:name => "Oklahoma", :abbreviation => "OK" }, 
  {:name => "Oregon", :abbreviation => "OR" }, 
  {:name => "Pennsylvania", :abbreviation => "PA" }, 
  {:name => "Rhode Island", :abbreviation => "RI" }, 
  {:name => "South Carolina", :abbreviation => "SC" }, 
  {:name => "South Dakota", :abbreviation => "SD" }, 
  {:name => "Tennessee", :abbreviation => "TN" }, 
  {:name => "Texas", :abbreviation => "TX" }, 
  {:name => "Utah", :abbreviation => "UT" }, 
  {:name => "Vermont", :abbreviation => "VT" }, 
  {:name => "Virginia", :abbreviation => "VA" }, 
  {:name => "Washington", :abbreviation => "WA" }, 
  {:name => "West Virginia", :abbreviation => "WV" }, 
  {:name => "Wisconsin", :abbreviation => "WI" }, 
  {:name => "Wyoming", :abbreviation => "WY"}
]

我可以使用rake db:seed 命令将数据播种到开发环境中,但我对如何在测试环境中执行此操作感到困惑。我正在使用 rspec 和 rake test:prepare 命令,但这只是设置了一个空数据库。

有没有办法在运行rake test:prepare 时将数据只播种一次到测试环境中?

【问题讨论】:

  • 为什么不能加载状态before(:each)

标签: ruby-on-rails testing activerecord


【解决方案1】:

如果你只是想在测试环境中运行rake db:seed,那么你可以运行这个命令:

rake RAILS_ENV=test db:seed

实际上,您可以使用 RAILS_ENV 选项传递任何 Rails 环境

【讨论】:

    【解决方案2】:

    我可以添加...

    load "#{Rails.root}/db/seeds.rb"
    

    到我的 spec/spec_helper.rb 文件,每次运行测试时都会运行我的种子文件。

    【讨论】:

      【解决方案3】:

      把它放在你的 spec_helper 中:

      Rails.application.load_seed
      

      【讨论】:

      • 如果考虑到 Ruby/Rails 最佳实践,这是最好和最干净的答案。
      • 我只能通过将此行添加到 rails_helper.rb 文件来使其工作。使用 Rails 6++
      猜你喜欢
      • 2015-07-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多