我让我们的RSpec套件以随机顺序运行,以确保独立性和健壮性。但是,有几种情况我想按顺序运行规范。我知道我可以在命令行上使用--order default
,但我想将其与CI集成。我们使用TDDium进行CI,我想尝试在CI服务器上继续随机运行,但要确保按顺序运行特定的spec文件。
有没有办法在逐个文件的基础上指定RSpec应该按默认顺序运行该文件?我看到似乎有some customized ordering strategy support merged into rspec-core,但似乎没有完全出炉(我不确定它是否支持before :all
),我仍然试图绕过它
并且,由于another question因为“规格应该是独立的”而被推崇,所以让我说明我的用例试图先发制人地避免“你不应该这样做”的论点。
我们有一个复杂的模型,系统状态的各个方面随着时间的推移而变化。我有一个分析系统正在观察该系统以跟踪各种事物随时间的状态变化。感谢Timecop gem,我可以回到过去,创建一系列相互作用的模型,然后逐步完成,比如5天,看看分析系统看到的系统,在每天的已知条件下。具体来说,考虑到系统中嵌入的假设,确保某些计算是正确的。
现在,我意识到我可以有5个单独的描述块,每个描述块都经历了为历史中的每个5天设置个别条件的过程,但是对于我来说,通过时间观察并观察处于该状态时的状况发生变化。更高效,更能与系统中实际发生的事情联系起来。我知道我可以在这里和那里模拟各种响应,我们这样做,但我有兴趣逐步完成基本系统和分析系统之间的“实时”交互。
答案 0 :(得分:2)
我应该只阅读规范,而不是merged feature in the rspec core中的代码。很明显given this spec。
给定custom_ordered_spec.rb:
RSpec.configure do |config|
config.order_groups_and_examples do |list|
list.sort_by { |item| item.description }
end
end
describe 'group B' do
specify('group B example D') {}
specify('group B example B') {}
specify('group B example A') {}
specify('group B example C') {}
end
describe 'group A' do
specify('group A example 1') {}
end
组内的组和示例将按说明排序。此外,您似乎可以致电config.order_groups
和config.order_examples
。
这是关于它的我的blog post,有一些更详细的说明。
答案 1 :(得分:0)
当前(3.5)Rspec不再具有order_groups_and_examples方法。相反,你可以register an ordering:
RSpec.configure do |config|
config.register_ordering :alphabetical do |list|
list.sort_by { |item| item.description }
end
end
RSpec.context "Test in alphabetic order", :order => :alphabetical do
describe 'group B' do
specify('group B example D') {}
specify('group B example B') {}
specify('group B example A') {}
specify('group B example C') {}
end
describe 'group A' do
specify('group A example 1') {}
end
end