rspec首先运行哪一个? spec_helper.rb或db:test:prepare

时间:2014-08-01 13:56:24

标签: ruby-on-rails ruby rspec

我正在尝试对错误的database.yml配置执行额外检查。在我们的配置中,我们遵循rails database.yml约定,它基本上将“_#{env}”后缀添加到数据库的名称中。我们在另一个项目(而不是rails)上发生了一个事件,有人忘记在运行单元测试之前切换数据库,导致我们丢失了暂存环境中的数据。我们通过添加一个简单的检查来破解变通方法,即:如果数据库名称不以“_test”结尾,请不要擦除它,不要对其运行单元测试。

那么对rails执行此检查的正确方法是什么。我想我可以在spec_helper.rb中执行此操作,但是当我在更改数据库名称后运行测试时,而不是提出我写的错误消息,它抛出:

TinyTds::Error: Database 'some_db_name' does not exist. Make sure that the name is entered correctly.

这意味着,它在加载spec_helper.rb之前连接到db。我找不到有关何时执行db:test:prepare的任何信息,并且没有勇气使用没有“_test”后缀的现有数据库来测试它。

我可以使用钩子吗?

1 个答案:

答案 0 :(得分:0)

包含在您的spec_helper.rb

ENV["RAILS_ENV"] = 'test'

行rspec测试应该在测试环境中运行,寻找测试数据库连接字符串,因此始终在测试数据库中运行。对其他不同的环境数据库没有任何问题