Testes RSpec Dinâmicos

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.