Como marcar um bloco it_should_behave_like como pendente
tl;dr
Use algo como:
context "something", pending: true do
it_should_behave_like "an unauthorized controller" do
before { post :execute, something: params }
end
end
Como vocês viram no post Criando métodos helper no RSpec eu criei um helper para evitar ter que digitar o mesmo código várias vezes, basicamente sendo DRY.
Existem vários jeitos no RSpec para evitar duplicação de código, um deles é usando o it_should_behave_like
.
Para exemplificar eu tenho esse trecho de cógido:
shared_examples_for "an unauthorized controller" do
it "should return correct error message" do
expect(json_response["errors"][0]["message"]).to eq "Not authorized"
end
end
E eu posso chamar assim:
it_should_behave_like "an unauthorized controller" do
before { post :execute, something: params }
end
É possível ter vários it
. No meu caso que eu também verifico o código de retorno da requisição.
Porém um dos controllers não estava retornando nem a mensagem nem o código de erro correto.
O que fazer então?
- Marcar como pendente?
- Comentar as linhas? ou
- Não adicionar o código?
Não colocar essa chamada ao it_should_behave_like
não me parece certo. A probabilidade de nunca ninguém voltar para corrigir isso é muito maior.
Colocar o código comentado com um FIXME
me parece menos errado, mas mesmo assim a probabilidade de que alguém nunca volte para corrigir também é grande.
E outro dois fatores que me fazem usar blocos pendentes no RSpec são:
- Alertar que determinado teste precisa ser finalizado;
- Se por algum motivo o teste volta a passar o RSpec emite um alerta.
Eu não vejo problema em a build demorar um pouco mais rodando teste pendente se eu vou receber um alerta de que aquele código foi corrigido.
A solução que encontrei foi marcando todo o context
como pendente, no exemplo ficaria algo como:
context "when it is a regular API controller", pending: true do
it_should_behave_like "an unauthorized controller" do
before { post :execute, something: params }
end
end
Lembre-se: nesse caso se o teste voltar a passar a sua build vai quebrar.