A recompensa deste app: RSpec, o framework que ele escolheu
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.
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.