Сценарий
Я пишу библиотеку (без Ruby on Rails), для которой я хотел бы иметь очень подробные функции Cucumber. Это особенно касается описания ошибок/исключений, которые должны быть выбрасываться в различных случаях.
Пример
Самый интуитивный способ записи шагов Cucumber, вероятно, будет чем-то вроде
When I do something unwanted
Then an "ArgumentError" should be thrown
Проблема
Есть два вопроса, которые я должен решить:
- Первый шаг не должен терпеть неудачу при вызове исключения.
- Исключение, которое должен выполнить первый шаг, должно быть доступно для второго шага, чтобы сделать некоторую магию утверждения.
Неудобное и громоздкое решение
Лучший подход, который я смог придумать, - кэшировать исключение на первом этапе и поместить его в переменную экземпляра, к которой может получить доступ второй шаг:
When /^I do something unwanted$/ do
begin
throw_an_exception!
rescue => @error
end
end
Then /^an "(.*)" should be thrown$/ do |error|
@error.class.to_s.should == error
end
Однако это делает первый шаг более или менее бесполезным в тех случаях, когда я не хочу, чтобы он терпел неудачу, и для него требуется переменная экземпляра, которая никогда не бывает хорошей.
Итак, может ли кто-нибудь помочь мне с хотя бы менее громоздким решением? Или я должен писать свои функции по-другому? Любая помощь будет высоко оценена.