【问题标题】:Seeds.rb development environment also getting applied to test environmentSeeds.rb 开发环境也被应用于测试环境
【发布时间】:2012-11-10 21:15:14
【问题描述】:

我需要将某些内容植入到测试环境中,特别是来自 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 后正确地提取种子.rb

db/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

怎么了?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不确定你的意思。命名空间的目标是 db:test:prepare 并且应该在 seed.rb 中控制
    • 这可能是正确的答案,因为 Rails 默认为开发环境,然后在某些时候切换到测试环境作为运行测试任务的一部分。它不一定会在执行 db:test:prepare 之前将 Rails.env 切换到 test。从 Rails 的角度来看,它需要做的就是在启动测试套件之前切换环境。 IMO,您应该为 dev/prod 保留种子,并将测试设置留给测试套件本身。
    【解决方案2】:

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

    【讨论】:

    • 不,数据库使用正确。不过会是个问题,因为每次我运行测试时,开发数据库都会被清除,哈哈
    【解决方案3】:

    尝试执行:

    $ RAILS_ENV=test rake db:seed

    【讨论】:

      【解决方案4】:

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

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

      同时验证您的config/environment.rb

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-05
        • 2021-06-12
        • 1970-01-01
        • 2020-11-23
        • 2014-09-16
        • 2018-07-28
        • 2014-06-11
        相关资源
        最近更新 更多