Criando métodos helper no RSpec

#automated-test, #dev, #ruby

Recentemente eu estava escrevendo teste para uma API e eu percebi que eu sempre escrevia algo como:

expect(JSON.load(response.body)["data"]["posts"]).to eq "XXX"
expect(JSON.load(response.body)["data"]["authors"]).to eq "XXX"

De cara você nota que:

  • expect().to eq é parte do teste, então vamos precisar disso e desse jeito;
  • JSON.load(response.body)["data"] é muito para escrever e não faz parte da syntax padrão.

Um outro agravante é que eu estava apresentando testes automatizados na empresa. Então era necessário que eu fizesse o mais fácil de ler e escrever quanto possível. Eram principalmente pessoas que tem conhecimento do que é teste automatizados, mas que não estão acostumadas com isso.

Vamos ao código!

Eu escrevi algo como:

module MyApp
  module Helpers
    def json_response
      JSON.load(response.body)
    end

    def api_response
      json_response["data"]
    end
  end
end

RSpec.configure do |config|
  config.include MyApp::Helpers
end

MyApp normalmente é o mesmo módulo em config/application.rb se você está numa app Rails.

E sim, tem dois métodos. O primeiro é por que muitas vezes eu vou querer só a resposta em json mesmo, e o segundo é para a resposta padrão da API.

Posts nesta série