Я бы хотел написать такую спецификацию, как
describe Foo do
before :each do
@hash = some_very_expensive_setup_op
end
describe "hash" do
subject{@hash}
its([:a]){should == 10}
its([:b]){should == 20}
its([:c]){should == 30}
end
end
И вполне разумно, что RSpec выполняет блок before перед каждым его блоком. Во многих случаях это то, что вы хотите, но в приведенном выше случае и во многих моих тестах последний лист его блоков делает утверждения, которые не имеют побочных эффектов.
Я мог бы переписать спецификацию как
describe Foo do
before :each do
@hash = some_very_expensive_setup_op
end
describe "hash" do
it "should have some attributes" do
@hash[:a].should == 10
@hash[:b].should == 20
@hash[:c].should == 30
end
end
end
Теперь все утверждения сделаны в одном блоке. Спецификация функционально идентична, но я не получаю сочные отчеты о первой версии, перечисляющие каждое утверждение в форматере документации.
Вывод важен для меня, потому что я пытаюсь использовать вывод в качестве документации для потребителей веб-API. Например, для одной из моих спецификаций у меня есть вывод вроде
GET /status.json?ago=:ago
it should behave like authenticated
GET /status.json
accepts a valid user
rejects an invalid user
request
request attributes
:ago - number of seconds of history to calculate statistics
:current_user ( implicit )
response attributes
scale
downtime
points
nextlevel
Но с увеличением количества атрибутов характеристики замедляются.
Существуют ли какие-либо решения для этого противоречия между мелкозернистыми отчетами?
выход и тест производительности?