A conversão é um monstro cabeludo e assustador
Como o RSpec é principalmente um DSL para descrever expectativas, você pode instanciar testes em tempo real. O caso de uso em que achei isso útil foi ao testar casos extremos e condições de limite para um conversor de tempo. (Para testes funcionais, ele se comporta como parâmetros tabulares em jBehave e tabelas de dados em Cucumber.)
Criei um Hash de testes de potencial e os enumerei: No bloco, alimentei os valores de | k, v | para o teste e gerou 6 testes contra o método de conversão estática em tempo real.
describe AmbiguousTime do
times = { 43200 => '12:00PM',
72000 => '8:00PM',
84600 => '23:30PM',
27000 => '7:30AM',
55800 => '3:30PM',
55800 => '3:30' }
times.each do |planned_output, input|
it "should return #{planned_output} from #{input}" do
actual_output = AmbiguousTime::convert(input)
actual_output.should eql(planned_output)
end
end
end
NB: há um ‘pegadinha’ na configuração “answer => question”; porque Ruby congela as chaves de um Hash, você não pode realizar operações de modificação nelas. Portanto, o arranjo | saída, entrada | leva isso em consideração.