我需要将某些东西植入测试环境,特别是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
有什么不对?
答案 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