Seeds.rb开发环境也适用于测试环境

时间:2012-11-10 21:15:14

标签: ruby-on-rails ruby ruby-on-rails-3 rspec tdd

我需要将某些东西植入测试环境,特别是CanCan的用户角色。但它似乎正在加载一切正在开发中。

lib / tasks / test _ seed.rake

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end

在运行bundle exec rake db:test:prepare

之后正确拉入seeds.rb

分贝/ seeds.rb

admin = Role.create( { name: "admin" }, :without_protection => true)
user  = Role.create( { name: "user"  }, :without_protection => true)

if Rails.env.production? || Rails.env.development?

  admin = User.create!({ name:     "Admin",
                         email:    "admin@example.com",
                         password: "foobar",
                         password_confirmation: "foobar",
                         role_ids:  1 },
                         :without_protection => true)
  admin.confirm!    

  if Rails.env.development?

    48.times do |n|
      name  = Faker::Name.name
      email = "example-#{n+1}@example.com"
      password  = "foobar"
      fake = User.create!({ name:     name,
                            email:    email,
                            password: password,
                            password_confirmation: password },
                            :without_protection => true)
      fake.confirm!
    end
  end
end

一切看起来不错,但后来........

$ rails console test
Loading test environment (Rails 3.2.8)
  > User.first
User Load (1.0ms) SELECT "users".* FROM "users" LIMIT 1
  => #<User id: 1, email: "admin@example.com" ..................
  > Rails.env.development?
  => false

有什么不对?

4 个答案:

答案 0 :(得分:1)

在启动任务之前,您必须将环境变量ENV设置为test

答案 1 :(得分:0)

也许,您在开发和测试环境中使用相同的数据库。检查你的database.yml

答案 2 :(得分:0)

尝试执行:

$ RAILS_ENV=test rake db:seed

答案 3 :(得分:0)

首先,尝试在终端中执行它: echo $RAILS_ENV

  • 如果显示test,那么您就得到了答案。
  • 如果不是,请验证您的config/database.yml是否在两个环境中使用相同的数据库。

同时验证您的config/environment.rb