Comment faire des tests à Sinatra?

Je n'ai aucune idée de comment tester mon application Sinatra. Dois-je juste run

ruby

Qui ne semble pas fonctionner. Tous les fichiers ne parlent que de la façon d'écrire le contenu du fichier, mais pas de la façon de l'exécuter.

Merci

17
demandé sur Tony M. 2010-01-13 13:27:49

3 réponses

Devrait être assez simple.

compte tenu de my_app.rb:

require 'rubygems'
require 'sinatra'

get '/hi' do
  "Hello World!"
end

et my_app_test.rb:

require 'my_app'
require 'test/unit'
require 'rack/test'

set :environment, :test

class MyAppTest < Test::Unit::TestCase
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  def test_hi_returns_hello_world
    get '/hi'
    assert last_response.ok?
    assert_equal 'Hello World!', last_response.body
  end
end

vous devez vous assurer que vous avez les bonnes gemmes installées:

gem install sinatra rake rack-test

Maintenant vous pouvez exécuter votre application et des tests comme ceci:

ruby my_app.rb
ruby my_app_test.rb
27
répondu psyho 2013-08-18 21:41:26

j'ai posté un petit exemple en fonction de la réponse de psyho. J'ai aussi ajouté le support ActiveRecord, y compris les fixtures de test.

j'ai configuré rake pour exécuter les tests:

# Rakefile
require_relative './app'
require 'rake'
require 'rake/testtask'
require 'sinatra/activerecord/rake'

Rake::TestTask.new do |t|
  t.pattern = "test/**/*_test.rb"
end

task default: :test

Maintenant, je peux exécuter les tests de ce genre:

rake

Un exemple de test ressemble à ceci:

require_relative '../test_helper'

class BlogTest < ActiveSupport::TestCase
  fixtures :blogs

  def test_create
    blog = Blog.create(:name => "Rob's Writing")
    assert_equal "Rob's Writing", blog.name
  end

  def test_find
    blog = Blog.find_by_name("Jimmy's Jottings")
    assert_equal "Stuff Jimmy says", blog.tagline
  end
end

j'ai besoin de cette aide dans chaque fichier de test pour tout mettre en ligne:

# test_helper.rb
require_relative '../app'
require 'minitest/autorun'
require 'active_record'
require 'rack/test'

ActiveRecord::Base.establish_connection(:test)

#Set up fixtures and such
class ActiveSupport::TestCase
  include ActiveRecord::TestFixtures
  include ActiveRecord::TestFixtures::ClassMethods
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  self.fixture_path = 'test/fixtures'
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
end
0
répondu Don Kirkby 2017-05-23 10:30:08

Devrait être aussi simple que ruby your_app_name.rb. En fait, c'est indiqué sur Sinatra page d'accueil (en bas).

-1
répondu Damir Zekić 2010-01-13 10:34:11