最佳答案
在进行了大量的故障排除之后,我发现我需要运行一次 rake spec
(我可以用 control-c 中止) ,然后才能直接运行 rspec (例如对 specs 的子集)。我们正在运行 Rails 3.0.7和 RSpec 2.5.0。
很明显,rake 正在运行一些重要的数据库设置任务/代码(我们在根级别 RailsRakefile 中有自定义代码,可能还有其他地方)。
如何在不运行 rake spec
的情况下运行 rake 测试数据库安装任务/代码?
除了能够在一个子集文件上运行 rspec,我还使用 (法语)将我们的 specs 分散到多个核(还没有成功地将它们分散到局域网中) ,但是我看到了直接运行 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:
Par _ test 似乎正确地设置了它的数据库,但是我们的许多规范都失败了。
我还应该提到,运行 specjour prepare
会导致 Postgres 记录无法找到数据库的错误,但它会创建这些错误(没有表)。在随后的运行中,不会记录任何错误,也不会创建任何表。我的整个问题可能只是 prepare
中的一个 bug,所以我在 github 上报告了它。
我认为我可以通过在每个 specjour 测试数据库中设置 Specjour::Configuration.prepare
来运行任意代码。Specjour/hooks.rb,所以如果有任何 rake 任务或其他代码需要运行,它可能会在那里工作。