想知道是否有方法可以运行Rails测试而不丢失数据库。我目前只执行单元测试,并使用以下rake命令来执行此操作:rake test:units
。运行Rails测试而不丢弃测试数据库
感谢您的帮助!
以防万一,这是相关的:
- 的Rails 3
- 的Ruby 1.8.7(MRI)
- 在Oracle 11g数据库
- 的ActiveRecord-oracle_enhanced适配器
想知道是否有方法可以运行Rails测试而不丢失数据库。我目前只执行单元测试,并使用以下rake命令来执行此操作:rake test:units
。运行Rails测试而不丢弃测试数据库
感谢您的帮助!
以防万一,这是相关的:
在做了一些研究后,我发现没有办法做到这一点。即使在Bohdan提供的选项中提供选项时,测试rake任务将始终会丢失数据库。
通过使用--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任务的意思。需要特别注意的是任务,你可以从输出的最下面看到第7行为** Execute db:test:load
。导游说这个任务如下:
重新创建从 当前schema.rb测试数据库
所以,即使我是来执行单元测试逐一博赫丹所暗示的, rake任务仍然会重新创建数据库。不是我希望的答案,但它不再是问题。
我之所以要求开始的原因是因为我没有访问另一个数据库用于测试,所以我也使用我的开发数据库进行测试。但从那以后,我已经能够获得另一个专门用于测试的数据库。
无论如何感谢Bohdan!我感谢帮助!
难道你不能写一个自定义Rake任务,猴子修补Rake数据库:测试:加载任务什么都不做?
这是一个比较旧的文章,做的压倒一切的清洗/负载任务猴子补丁: http://www.pervasivecode.com/blog/2007/09/22/making-rails-raketest-not-drop-your-pgsql-database/
相似的答案可以在这里找到:http://stackoverflow.com/q/24785428/680464 ----和这里:http://stackoverflow.com/q/8112074/680464 – juanitogan 2014-09-29 20:04:56
对于那些寻找一种方式来跳过Rails的默认行为,你可以添加以下到您的Rake文件:
Rake::Task["db:test:prepare"].clear
Rake::Task["db:test:load"].clear
Rake::Task["db:test:purge"].clear
这是行不通的! – dariush 2017-05-20 18:25:35
在Rails 5(甚至更早的版本),只是注释掉以下行spec/rails_helper.rb
:
ActiveRecord::Migration.maintain_test_schema!
这会阻止rake test
或rspec
试图删除您的测试数据库。您还需要手动运行迁移。
很高兴听到它。您的测试数据库*应该*在每次运行测试时被清除,否则您的测试将不准确。 – 2011-11-02 17:37:16