vanderleipinto / test_app

0 stars 0 forks source link

Webmock #35

Closed vanderleipinto closed 6 months ago

vanderleipinto commented 7 months ago

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:

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.

Image

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.