经过重大故障排除后,我发现我需要运行rake spec
一次(我可以使用 control-c 中止),然后才能直接运行 rspec(例如,在我们规范的子集上)。我们正在运行 Rails 3.0.7 和 RSpec 2.5.0。
显然,rake 正在运行一些重要的数据库设置任务/代码(我们在根级 rails Rakefile 和可能的其他地方有自定义代码)。
如何在不运行的情况下运行 rake 测试数据库设置任务/代码rake spec
?
除了能够在文件子集上运行 rspec 之外,我还使用specjour将我们的规范传播到多个核心(尚未成功将它们传播到 LAN 中),但我看到与运行 rspec 相同的行为直接:rake spec
在specjour工作之前,我需要在每个测试数据库上运行(假设有两个核心):
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
,所以我在 github 上报告了它。
我认为我可以通过Specjour::Configuration.prepare
在 .specjour/hooks.rb 中设置来在每个 specjour 测试数据库上运行任意代码,所以如果有任何 rake 任务或我需要运行的其他代码,它可能在那里工作。