经过重大的故障排除,我发现我需要运行rake spec
次(我可以使用control-c中止),然后才能直接运行rspec(例如,在我们规范的子集上).我们正在运行Rails 3.0.7和RSpec 2.5.0.
显然,rake正在运行一些重要的数据库设置任务/代码(我们在根级别的rails Rakefile和其他地方都有自定义代码).
How can I run the rake test database setup tasks / code without running 100?
除了能够在一部分文件上运行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
注意:我的配置/数据库.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测试数据库上运行任意代码,只需在中设置Specjour::Configuration.prepare
.规格/挂钩.rb,所以如果我需要运行任何rake任务或其他代码,它可能会在那里工作.