gpt4 book ai didi

ruby-on-rails - rails : Make this rake task aware that it is in the test environment

转载 作者:行者123 更新时间:2023-12-03 14:47:21 24 4
gpt4 key购买 nike

我在 lib/tasks 中定义了以下 rake 任务文件夹:

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

现在,当我运行 rake db:test:prepare 时,它的作用是为测试数据库设置种子。 .我这样做是因为我有一些必须存在的基本记录才能使应用程序运行,所以它们不是可选的,也不能真正被 mock 。

另外,我有一个模型在开发和生产中使用 S3 进行 Assets 存储,但我不希望它使用 S3 进行测试。我在模型中设置了一个方法,如果 Rails.env.test? 将存储路径从 S3 更改为本地

但是,这不起作用。我想知道 rake 任务是否知道它是从什么环境中调用的,但事实证明它不是。我把它放在我的 seed.rb 文件的顶部:
puts "Environment Check: Rails Environment = #{Rails.env}"

果然,当任务运行时打印: Environment Check: Rails Environment = development
那么,我怎样才能重做这个 rake 任务,以便在它播种测试数据库时它知道它正在播种测试数据库?

最佳答案

我也有这个问题;在我的 db/seeds.rb文件我有一个在开发环境中创建用户帐户的块,但是在准备测试环境以运行时也创建了它们rake用于 RSpec 或 Cucumber 测试,结果是一堵红墙。

更新 : 我发现 best way to specify the environment for rake tasks是指定任务内的环境,首先是需要设置环境的语句。所以在这种情况下:

Rails.env = 'test'
Rake::Task["db:seed"].invoke

做这份工作。

关于ruby-on-rails - rails : Make this rake task aware that it is in the test environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5525757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com