Willian Fernandes

Testando Sinatra com RSpec (dica para quem usa Rails Metal)

Comente »

Após ler o post do Diego Carrion sobre como usar RSpec[bb] para testar uma aplicação Sinatra, lembrei que tive um problema com os testes quando trouxe a aplicação feita em Sinatra para uma outra feita em Rails[bb] usando Rails Metal.

Vou usar o exemplo do Carrion para mostrar o que precisei mudar para os testes rodarem dentro do Rails Metal. Se no Sinatra usamos o spec_helper.rb assim:

require File.join(File.dirname(__FILE__), '..', 'main.rb')
 
require 'spec'
require 'rack/test'
 
Spec::Runner.configure do |conf|
  conf.include Rack::Test::Methods
end
 
def app
  Sinatra::Application
end

No Rails Metal precisamos usar o arquivo spec_helper.rb normal, da forma como ele for gerado pelo RSpec.

A classe Api é um rails metal, mas nesse caso ela deve extender a classe Sinatra::Base (rails_root/app/metal/api.rb):

require 'sinatra'
 
# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + '/../../config/environment') unless defined?(Rails)
 
class Api < Sinatra::Base
  # Code
end

E no arquivo api_spec.rb definimos o método app assim:

require 'spec_helper'
 
describe "Api" do
  include Rack::Test::Methods
 
  def app
    Api.new
  end
 
  # code
end

No exemplo acima precisei fazer require ‘rack/test’ no spec_helper.rb. Para isso, basta instalar a gem rack-test.

Como você pode ver, com uma simples mudança você pode usar Sinatra com Rails e fazer seus testes com RSpec.

1 comentário para "Testando Sinatra com RSpec (dica para quem usa Rails Metal)"

Deixe um comentário

*

(obrigatório)Não é aceito código HTML: adicione-o no pastie.org e poste apenas o link.