Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在不删除测试数据库的情况下运行Rails测试_Ruby On Rails_Unit Testing_Testing_Ruby On Rails 3_Oracle11g - Fatal编程技术网

Ruby on rails 在不删除测试数据库的情况下运行Rails测试

Ruby on rails 在不删除测试数据库的情况下运行Rails测试,ruby-on-rails,unit-testing,testing,ruby-on-rails-3,oracle11g,Ruby On Rails,Unit Testing,Testing,Ruby On Rails 3,Oracle11g,只是想知道是否有一种方法可以在不删除数据库的情况下运行Rails测试。我目前只执行单元测试,并使用以下rake命令来执行:rake测试:units 提前谢谢你的帮助 以防万一: 轨道3 Ruby 1.8.7(MRI) oracle11g数据库 activerecord-oracle\u增强型适配器 在做了一些研究之后,我发现没有办法做到这一点。test-rake任务将始终删除数据库,即使按照Bohdan的建议提供了test=选项 通过使用--trace选项,可以证明这一点。以下是输出: $

只是想知道是否有一种方法可以在不删除数据库的情况下运行Rails测试。我目前只执行单元测试,并使用以下rake命令来执行:
rake测试:units

提前谢谢你的帮助

以防万一:

  • 轨道3
  • Ruby 1.8.7(MRI)
  • oracle11g数据库
    • activerecord-oracle\u增强型适配器

在做了一些研究之后,我发现没有办法做到这一点。test-rake任务将始终删除数据库,即使按照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
通过阅读,它描述了一些rake任务的含义。需要特别注意的一个任务是db:test:load任务,您可以在输出底部的第7行看到它,即执行db:test:load。指南对这项任务说了以下几点:

从中重新创建测试数据库 当前schema.rb

因此,即使我按照Bohdan的建议逐个执行单元测试,rake任务仍然会重新创建数据库。这不是我所希望的答案,但已经不是问题了

我要求开始的原因是因为我没有访问另一个数据库用于测试,所以我也在使用我的开发数据库进行测试。但从那时起,我已经能够得到另一个专用于测试的数据库


谢谢你,波丹!我感谢你的帮助

你能不能编写一个自定义的Rake任务来对Rake db:test:load任务进行猴子补丁以使其不做任何事情?

这是一篇相当老的文章,它对覆盖清除/加载任务进行猴子补丁:

对于那些寻找跳过Rails默认行为的方法的人,请尝试将其添加到您的Rakefile中:

Rake::Task["db:test:prepare"].clear
Rake::Task["db:test:load"].clear
Rake::Task["db:test:purge"].clear
在Rails 5(以及可能更早的版本)中,只需注释掉
spec/Rails\u helper.rb
中的以下行:

 ActiveRecord::Migration.maintain_test_schema!

这将防止
rake test
rspec
试图丢弃测试数据库。您还需要手动运行迁移。

对于Rails 5.2,在导入
Rails/test\u help
之前,可以在
test/test\u helper.rb中将
维护测试\u schema
设置为
false

ActiveRecord::Base.maintain\u test\u schema=false
需要“rails/test\u帮助”

rails/test\u help
将检查
mainter\u test\u schema
的值,以决定是否必须删除/创建/迁移测试数据库。

很高兴听到这个消息。每次运行测试时都应该清除测试数据库,否则您的测试将不准确。类似的答案可以在这里找到:-这里:这确实应该是现在可以接受的答案。