Как вы проводите тесты в Синатре? - PullRequest
17 голосов
/ 13 января 2010

Понятия не имею, как протестировать приложение Sinatra. Я просто бегу

рубин

Это, похоже, не работает. Все файлы там говорят только о том, как записать содержимое файла, но не о том, как его запустить.

Спасибо

Ответы [ 3 ]

27 голосов
/ 14 января 2010

Должно быть достаточно просто.

Учитывая my_app.rb:

require 'rubygems'
require 'sinatra'

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

И 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

Вы должны убедиться, что у вас установлены правильные самоцветы:

gem install sinatra rake rack-test

Теперь вы можете запускать ваше приложение и тесты следующим образом:

ruby my_app.rb
ruby my_app_test.rb
1 голос
/ 28 января 2016

Я разместил небольшой пример на основе психо-ответа . Я также добавил поддержку ActiveRecord, включая тестовые данные.

Я настроил грабли для запуска тестов:

# 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

Теперь я могу запустить тесты так:

rake

Пример теста выглядит следующим образом:

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

Мне нужен этот помощник в каждом тестовом файле, чтобы все соединить:

# 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 голосов
/ 13 января 2010

Должно быть так же просто, как ruby your_app_name.rb. На самом деле это показано на домашней странице Sinatra (внизу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...