Matchers RSpec: expect
O curso trata das expectativas do RSpec do jeito que a suíte deste app as escreve. Começa pela ligação expect(actual).to matcher e pela forma .not_to. Depois lê os matchers no código-fonte instalado do RSpec: o eq compara com o == do Ruby, o include delega para o include? do próprio valor e o be_truthy segue a regra de verdade do Ruby. A forma com bloco mostra por que change e raise_error precisam de um bloco. Um guia de campo cobre matchers de predicado, have_http_status, redirect_to, contain_exactly e o encadeamento com .and.
O que você vai aprender
- ✓Como expect, .to e .not_to ligam um valor a um matcher
- ✓Por que o eq usa o == do Ruby e o include delega para o include?
- ✓Como be_truthy, be_falsey e be_nil seguem a regra de verdade do Ruby
- ✓Por que change e raise_error precisam da forma com bloco do expect
- ✓Como funcionam os matchers de predicado be_xxx e os de requisição do rspec-rails
- ✓Como encadear matchers com .and e usar o contain_exactly
expect(actual).to matcher: envolvendo um valor, descrevendo o que ele deveria ser
O curso logo antes deste, Fundamentos de RSpec, mostrou a forma de fora: describe, context e it, os blocos que organizam um teste e nomeiam o que ele verifica. Dentro de cada bloco it fica a afirmação em si, e o spec/services/identity/account_update_service_spec.rb deste app tem uma bem limpa:
Ler a aula completa grátis →Currículo
7 aulasexpect(actual).to matcher: envolvendo um valor, descrevendo o que ele deveria ser
Como o expect embrulha o valor real, como o matcher guarda a regra e como o .not_to inverte o resultado.
eq: comparando com o == do Ruby, lido do código do RSpec
Por que o eq roda o == do Ruby e como isso funciona com strings e objetos ActiveRecord.
include: delegando para o #include? do valor real
Como o include delega para o include? do próprio valor, com exemplos em Array e String e encadeamento com .and.
be_truthy, be_falsey, be_nil: a verdade do Ruby, e uma armadilha que a suíte deste app evita
Como be_truthy, be_falsey e be_nil seguem a regra de verdade do Ruby, e por que eq(true) falha no authenticate.
A forma com bloco: change e raise_error, e por que precisam de um bloco
Por que change e raise_error precisam de expect com bloco, e como funcionam not_to raise_error e not_to change.
Um guia de campo: os matchers de predicado, de requisição e o encadeamento deste app
Matchers de predicado be_xxx, matchers de requisição do rspec-rails, contain_exactly e encadeamento com .and ou .or.
Juntando tudo: lendo um matcher, escolhendo o certo
Uma revisão de como cada matcher delega para uma checagem simples e de como escolher pela pergunta feita.