Stub é forçar uma resposta específica para um determinado método de um objeto colaborador.
O webmock vai criar um stub que simula o url informado, ou seja, ele faz um acesso falso e gera um retorno especificado pelo testador.
Instalação
No arquivo Gemfile:
group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri windows ]
...
gem 'webmock'
end
Inserir dentro do rspec_helper.rb:
#Webmock gem
require 'webmock/rspec'
Testes
Depois da instalação, ao rodar novamente o teste percebemos um erro devido ao webmock
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled.
Esse erro se dá pelo fato do WebMock não permitir mais requisições via internet. No próprio erro ele já informa como proceder no teste.
Faremos o teste com a sugestão informada:
describe 'HTTParty' do
it 'content-type' do
stub_request(:get, "http://jsonplaceholder.typicode.com/posts/2").
with(
headers: {
'Accept'=>'*/*',
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
'User-Agent'=>'Ruby'
}).
to_return(status: 200, body: "", headers: {'content-type':'application/json'})
response = HTTParty.get('http://jsonplaceholder.typicode.com/posts/2')
content_type = response.headers["content-type"]
expect(content_type).to match(/application\/json/)
end
end
Aqui nós simulamos o acesso à url http://jsonplaceholder.typicode.com/posts/2 e informamos o que essa url deve retornar. Nesse caso informamos que essa url vai retornar um [header](headers: {'content-type':'application/json'})).
Então, quando ele roda o teste
response = HTTParty.get('http://jsonplaceholder.typicode.com/posts/2') ...
ele terá o retorno esperado.
Webmock
Stub é forçar uma resposta específica para um determinado método de um objeto colaborador. O webmock vai criar um stub que simula o url informado, ou seja, ele faz um acesso falso e gera um retorno especificado pelo testador.
Instalação
No arquivo Gemfile:
Inserir dentro do rspec_helper.rb:
Testes
Depois da instalação, ao rodar novamente o teste percebemos um erro devido ao webmock
WebMock::NetConnectNotAllowedError:
Real HTTP connections are disabled. Esse erro se dá pelo fato do WebMock não permitir mais requisições via internet. No próprio erro ele já informa como proceder no teste.
Faremos o teste com a sugestão informada:
Aqui nós simulamos o acesso à url
http://jsonplaceholder.typicode.com/posts/2
e informamos o que essa url deve retornar. Nesse caso informamos que essa url vai retornar um [header](headers: {'content-type':'application/json'})).Então, quando ele roda o teste
response = HTTParty.get('http://jsonplaceholder.typicode.com/posts/2') ...
ele terá o retorno esperado.