A recompensa deste app: RSpec, o framework que ele escolheu

Prévia grátis 3 min de leitura

Um comando, a saída deste app

bundle exec rspec spec/services/identity/account_update_service_spec.rb --format documentation
Identity::AccountUpdateService
  #call
    when updating basic info
      updates the user
    when changing the time zone
      saves a real zone
      rejects a name that is not a zone and keeps the old one
    when updating password
      updates the password when current password is correct
      fails when current password is incorrect
    when basic info and password are updated together
      does not persist the basic info change if the password update fails
      does not persist the basic info change if the new password confirmation does not match
      persists both changes together when everything is valid

Finished in 0.44975 seconds (files took 2.89 seconds to load)
8 examples, 0 failures

Essa é a saída de terminal da suíte de specs deste app, sem edição. Cada linha indentada vem de um describe, context ou it num único arquivo, spec/services/identity/account_update_service_spec.rb. O trabalho deste curso é mostrar como esse arquivo produz essa saída.

Onde este curso começa

O curso anterior, Minitest: testes de model, partiu de um fato que muitos cursos pulam: este app não usa Minitest nos próprios testes. Ele usa RSpec. Aquele curso cobriu um framework válido que este app não escolheu. Este cobre o framework que ele escolheu, nos termos dele, com os arquivos de spec em spec/.

Quatro blocos de construção, todos dos specs deste app

RSpec.describe é o invólucro de fora que nomeia o que está sendo testado: uma classe (Identity::AccountUpdateService), ou uma classe mais uma string simples (aula 2). context "when/with ..." do agrupa exemplos relacionados sob uma premissa comum; o arquivo acima tem quatro deles (aula 3). it "does something" do ... end é o exemplo em si, e este app também usa um segundo estilo, mais compacto (aula 4). let e let! montam os dados de que cada exemplo precisa, um de forma preguiçosa e o outro de forma imediata, e os specs deste app usam cada um por um motivo próprio (aula 5). A aula 6 trata da convenção de nomes que liga cada arquivo de spec ao código do app que ele exercita.

Como o resto deste curso foi checado

A saída citada nas próximas seis aulas, incluindo o bloco acima, veio de rodar os specs deste app com bundle exec rspec ... --format documentation. Nada disso foi escrito de memória sobre como a saída do RSpec costuma ser. Quando uma aula diz que um arquivo de spec faz algo, essa afirmação foi checada contra o arquivo neste repositório.

Aula 1 de 7 · grátis

Continue com a aula 2

RSpec.describe: nomeando o que é testado, duas formas

Trata do RSpec.describe com uma classe ou com classe e string, do described_class e do subject implícito.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...