ScenarioAffermare che una particolare eccezione viene generata in Cetriolo
Sto scrivendo una libreria (nessun Ruby on Rails) per il quale mi piacerebbe avere caratteristiche molto dettagliate cetriolo. Ciò include in particolare la descrizione di errori/eccezioni che dovrebbero essere lanciati in vari casi.
Esempio
Il modo più intuitivo per scrivere i passi di cetriolo sarebbe probabilmente qualcosa come
When I do something unwanted
Then an "ArgumentError" should be thrown
Problema
Ci sono due problemi che devo affrontare:
- Il primo passaggio non dovrebbe fallire quando viene lanciata un'eccezione.
- L'eccezione che i primi passi devono essere accessibili al secondo passaggio per fare un po 'di magia dell'asserzione.
Unelegant e ingombrante soluzione
L'approccio migliore che ho potuto venire in mente è la memorizzazione nella cache l'eccezione nella prima fase e di metterlo in una variabile di istanza che la seconda fase può accedere, in questo modo:
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
Tuttavia, ciò rende il primo passo più o meno inutili nei casi in cui ho non vuole il fallimento, e richiede una variabile di istanza, che non è mai una buona cosa.
Quindi, qualcuno può aiutarmi con una soluzione almeno meno ingombrante? O dovrei scrivere le mie caratteristiche in modo diverso comunque? Qualsiasi aiuto sarebbe molto apprezzato.
Ora che la domanda è ben scritta! Merita sicuramente una buona risposta (scusa se non sono riuscito a inventarne uno) :) – user562529
Grazie mille @ user562529. Sfortunatamente ho la sensazione che in realtà non ci sia una soluzione facile a questo problema, quindi potrei semplicemente aprire un problema con Cucumber e sperare che implementino qualcosa di pratico. – JLimperg