只是想知道是否有办法在不丢弃数据库的情况下运行Rails测试。我目前只执行单元测试,并使用以下rake命令执行此操作:rake test:units
。
提前感谢您的帮助!
以防这是相关的:
答案 0 :(得分:2)
经过一些研究,我发现没有办法做到这一点。即使提供了Bohdan建议的 TEST=
选项,测试佣金任务也会一直丢弃数据库。
通过使用 --trace
选项,可以证明这一点。这是输出:
$ rake test:units TEST=test/unit/post_test.rb --trace
(in /Users/johnnyicon/Development/ror/test-app)
** Invoke test:units (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:prepare
** Execute test:units
通过Ruby on Rails Guides for Testing阅读,它描述了一些rake任务的含义。需要特别注意的是 db:test:load
任务,您可以在输出底部的第7行看到 ** Execute db:test:load
。指南说明了以下有关此任务的内容:
从中重新创建测试数据库 current schema.rb
因此,即使我按照Bohdan的建议逐一执行单元测试,rake任务仍会重新创建数据库。不是我希望的答案,但它不再是一个问题。
我之所以要求开始的原因是因为我无法访问另一个用于测试的数据库,所以我也在使用我的开发数据库进行测试。但从那时起,我就能够获得另一个专门用于测试的数据库。
非常感谢Bohdan!我很感激帮助!
答案 1 :(得分:2)
这是一个相当古老的帖子,用于修补覆盖清除/加载任务的猴子补丁: http://www.pervasivecode.com/blog/2007/09/22/making-rails-raketest-not-drop-your-pgsql-database/
答案 2 :(得分:2)
在Rails 5(可能还有早期版本)中,只需注释掉spec/rails_helper.rb
中的以下行:
ActiveRecord::Migration.maintain_test_schema!
这会阻止rake test
或rspec
尝试删除测试数据库。您还需要手动运行迁移。
答案 3 :(得分:2)
对于Rails 5.2,可以在导入maintain_test_schema
之前修改false
中test/test_helper.rb
到rails/test_help
的此行为:
ActiveRecord::Base.maintain_test_schema = false
require "rails/test_help"
rails/test_help
将检查maintain_test_schema
的值,以决定是否必须删除/创建/迁移测试数据库。
答案 4 :(得分:1)
对于那些寻找跳过Rails默认行为的方法,请尝试将其添加到您的Rakefile中:
Rake::Task["db:test:prepare"].clear
Rake::Task["db:test:load"].clear
Rake::Task["db:test:purge"].clear
答案 5 :(得分:0)
你能否编写一个自定义Rake任务,猴子修补Rake db:test:load任务什么都不做?