José Galisteo Ruiz

¯\_(ツ)_/¯

Swagger Docs, Swagger UI y tests de integración

| Comments

En Apidemic estoy usando Swagger Docs para generar la documentación swagger de la API interna y Swagger UI para visualizarla.

La vista por defecto de Swagger UI la he personalizado un poco para añadirle un campo para la API key, pero si estás logado esta no es necesaria.

Todas estas características quería cubrirlas con tests de integración, pero tenía el problema de que los swagger docs se generan con una tarea rake y alguno parámetros como el base_path cambiaban en cada entorno. Además en los tests de integración el puerto cambia cada vez.

Así prepare los tests:

config/initializers/swagger_docs.rb
1
2
3
4
5
6
7
8
9
10
11
class Swagger::Docs::Config
  def self.transform_path(path, api_version)
    "#{Rails.application.config.host}/docs/#{path}"
  end
end

Swagger::Docs::Config.register_apis({
  "1.0" => {
    :api_extension_type => :json,
    :base_path => Rails.application.config.host,
# continue...
1
2
3
4
5
6
7
8
9
10
test 'foo' do
  visit(root_path)
  uri = URI(current_url)
  base_path = "http://#{uri.host}:#{uri.port}"

  Rails.application.config.stubs(:host).returns(base_path)
  Swagger::Docs::Config.registered_apis["1.0"][:base_path] = base_path
  Rake::Task["swagger:docs"].invoke
  # continue...
end

Comments