Conheça os test helpers: #travel_to e #travel_back no Rails 4.1

Quem trabalha com testes no Ruby on Rails certamente já teve de recorrer a gem timecop para cobrir os testes com dependências de tempo.

Como exemplo, posso citar a regra de negócio de um seguinte cenário:

O pagamento de um aluguel deve ser realizado em uma data específica de cada mês, exceto quando esse data cai em um fim de semana. Nesse caso, o pagamento será realizado na próxima segunda-feira.

ilustração: de volta para o futuro

Onde a gem timecop atua?

Timecop é uma gem que provê à nossa aplicação a capacidade de viajar ou parar no tempo, isso permite que consigamos realizar testes com dependência de tempo de forma muito simples, e certamente assegurar os testes para a nossa regra de negócio detalhada acima.

Os test helpers #travel_to e #travel_back

Com a nova release do Rails 4.1, agora temos os métodos: #travel_to e #travel_back.

Com o #travel_to podemos facilmente alterar o dia e horário fornecendo um valor ou duração de tempo. Já o #travel_back faz com que retornemos ao estágio atual, desfazendo as alterações do #travel_to.

Essa feature teve um destaque muito pequeno (o que não diminui sua importância, na minha opinião), sendo mencionada apenas no final das notas da release:

release notes: travel_to / travel_back

Editado em 24/10/2014

Exemplo de uso

1
2
3
4
5
6
7
8
9
10
11
12
describe SomeObject do
  include ActiveSupport::Testing::TimeHelpers

  it 'works with the new stuff' do
    the_thing = SomeObject.new

  # Executes travel back after the block yields
    travel_to(1.day.ago) do
      expect(the_thing.works_with_new_stuff?).to eq true
    end
  end
end

Referência: http://brandonhilkert.com/blog/rails-4-1-travel-to-test-helper/