es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mini servidor de pruebas para rspec sin rails.

Me gustaría probar un cliente de API en rspec.
Actualmente estoy simulando Typhoeus, pero me preguntaba si hay una forma más completa de hacerlo. Básicamente, lo que me gustaría es algo como esto:

it “hace una conexión con el servidor” do
MockServer.new do |server|
subject.url = server.url
subject.run!

expect(server.last_request.params).to eq({some: "params"})
expect(server.last_request.headers).to include({"X-whatty-what" => "yepyep"})

end
end

Quizás podría hacer esto con Sinatra o incluso directamente con Rack… ¿Alguien ha hecho algo así antes?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar Sinatra o rack para crear un servidor de prueba y realizar pruebas de extremo a extremo de tu cliente API en rspec. Con Sinatra, puedes definir rutas y respuestas para simular el comportamiento del servidor API. Aquí tienes un ejemplo:

    require 'sinatra/base'
    
    class MockServer < Sinatra::Base
      post '/path' do
        # devuelve una respuesta
        { foo: 'bar' }.to_json
      end
    end
    

    En tu prueba rspec, puedes iniciar el servidor de prueba y establecer la URL para que tu cliente API se conecte al servidor de prueba:

    require 'rspec'
    require 'typhoeus'
    
    describe API do
      let(:server) { MockServer.new }
      before { server.run! }
      after { server.stop! }
      let(:api_client) { API.new(url: server.url) }
    
      describe '#post_data' do
        it 'realiza una conexión al servidor' do
          response = api_client.post_data({ some: 'params' }, { 'X-whatty-what' => 'yepyep' })
          expect(response.code).to eq(200)
          expect(JSON.parse(response.body)).to eq({ 'foo' => 'bar' })
        end
      end
    end
    

    De esta manera, puedes probar tu cliente API con un servidor de prueba que se comporta como el servidor real y verificar que tu cliente interactúa correctamente con él.

Comments are closed.