Testar no percurso de Ruby

Aprende a testar os teus exercícios de Ruby no Exercism


Executar os testes

Executa os testes com:

$ ruby hamming_test.rb

Só o primeiro teste será executado; todos os outros ficaram pendentes através do método skip. Apaga ou comenta o próximo skip à medida que cada teste for passando.

Compreender os skips

O método skip instrui o conjunto de testes a não executar um teste. Isto é usado habitualmente para evitar executar testes de funcionalidades ainda não implementadas, para que te possas concentrar na parte em que estás a trabalhar neste momento.

O resumo da execução dos testes apresenta o número de testes ignorados. Deves desativar todos os skips antes de concluíres um exercício.

Personalizar o relatório dos testes

Se quiseres cor, executa os testes com:

$ ruby hamming_test.rb -p

Se quiseres ver os nomes dos testes, executa os testes com:

$ ruby hamming_tests.rb -v

Se quiseres correr apenas um teste, podes indicar um teste ou um grupo através de correspondência por expressão regular.

$ ruby hamming_tests.rb -n /empty/

Também podes combinar as opções.

Desativar todos os skips

Agora que já podes escolher os testes individuais ou grupos de testes que queres executar, talvez queiras desativar todos os skips.

A forma rápida e suja

Aproveitando o facto de que em Ruby os métodos podem ser redefinidos, se adicionares esta linha de código:

def skip ; end

assim, no ficheiro de testes do Hamming

class HammingTest < Minitest::Test
  def skip ; end
  def test_identical_strands

então todos os skips continuam a ser avaliados, mas deixam os teus testes correr.

Ainda rápida, mas mais limpa

Claro que andar sempre a editar todos os ficheiros pode ser irritante, por isso podes fazer como nós fizemos ao desenvolver os exercícios... criar um ficheiro que tenha a definição do skip e fazer require desse ficheiro como biblioteca quando precisares.

Criámos uma pasta lib para guardar os nossos ficheiros de apoio, e tem este aspeto:

require 'minitest/autorun'
# You can use this to disable all skips in the current exercise by issuing the
# following command:
#     ruby -I../lib -rdisable_skip <filename_test.rb>

module Minitest
  class Test
    def skip(_msg='', _bt=caller)
    end
  end
end

A descrição de como o usar está comentada nessa listagem, e a listagem do ficheiro está no seu estado completo.