我試圖讓我的規範保持乾淨和乾爽,但我對除測試API的哪個版本以外的API相同的API進行了一些測試。我可以重複的規格簡單地使用這樣的事情:重複使用不同參數的RSpec示例組
%w(v1 v2).each do |version|
describe "Query #{version} API" do
it "responds with JSON"
# make the call using the version
end
end
end
,但我想的東西有點清潔,所以我寫了這個方法:
module RepetitivelyDescribe
def repetitively_describe(*args, &example_group_block)
options = args.extract_options!
options.delete(:for).each do |item|
item_args = args.collect(&:dup) + [options.dup]
item_args[0] << " [#{item}]"
describe(*item_args) do
example_group_block.call item
end
end
end
end
RSpec::Core::ExampleGroup.extend RepetitivelyDescribe
然後我的測試可以看看更多這樣的:
repetitively_describe "Query API", :for => %(v1 v2) do |version|
it "responds with JSON"
# make the call using the version
end
end
我意識到這是迂腐一點點,但它縮進少了一個級別,如果我將要作出這個調用了很多,我想有它清潔器。
但是,當然,它並不像我想的那樣工作。在我的repetitively_describe
內對describe
的調用沒有被記錄到RSpec輸出(當使用文檔格式輸出時),儘管內部的例子得到了重複並且按照預期使用了版本塊參數。實質上,這種上下文級別會丟失(保留repetitively_describe
塊外部和內部的describe
塊)。
如果需要,還有更詳細的示例代碼a gist。任何線索,爲什麼這不是正確的工作?
我個人使用共享上下文或共享示例組。 「it_behaves_like」查詢API「do let(:version){:v1}結束」。 https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples https://www.relishapp.com/rspec/rspec-core/v/2-9/docs/example -groups/shared-context – d11wtq