【发布时间】:2011-08-20 10:37:30
【问题描述】:
经过重大故障排除后,我发现我需要运行一次rake spec(我可以使用 control-c 中止),然后才能直接运行 rspec(例如,在我们规范的一个子集上)。我们正在运行 Rails 3.0.7 和 RSpec 2.5.0。
显然,rake 正在运行一些重要的数据库设置任务/代码(我们在根级 rails Rakefile 和可能的其他地方有自定义代码)。
如何在不运行 rake spec 的情况下运行 rake 测试数据库设置任务/代码?
除了能够在文件子集上运行 rspec 之外,我还使用 specjour 将我们的规范传播到多个内核(尚未成功将它们传播到 LAN 中),但我看到了相同的直接运行 rspec 的行为:在 specjour 工作之前,我需要在每个测试数据库(假设两个核心)上运行 rake spec:
rake spec TEST_ENV_NUMBER=1
control-c (after tests start)
rake spec TEST_ENV_NUMBER=2
control-c (after tests start)
specjour
注意:我的 config/database.yml 有这个测试条目(对于并行测试 gem 来说很常见):
test:
adapter: postgresql
encoding: unicode
database: test<%=ENV['TEST_ENV_NUMBER']%>
username: user
password:
parallel_tests 似乎正确设置了它的数据库,但我们的许多规范都失败了。
我还应该提到,运行 specjour prepare 会导致 Postgres 记录它无法找到数据库的错误,但它会创建它们(没有表)。在随后的运行中,不会记录任何错误,也不会创建表。有可能我的整个问题只是prepare中的一个bug,所以我在github上报告了。
我认为我可以通过在 .specjour/hooks.rb 中设置 Specjour::Configuration.prepare 在每个 specjour 测试数据库上运行任意代码,所以如果有任何 rake 任务或我需要运行的其他代码,它可能在那里工作。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 rspec rspec2 specjour