2010-01-13 3 views
17

Я понятия не имею, как проверить мое приложение Sinatra. Должен ли я просто запуститьКак вы проводите тесты в Синатре?

Руби

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

Благодаря

+0

Официальные документы Sinatra на тестирование: http://www.sinatrarb.com/testing.html – imwilsonxu

ответ

-1

Должно быть так просто, как ruby your_app_name.rb. Фактически, это показано на Sinatra homepage (внизу).

+1

Спасибо, что ответили. Наверное, я не понял, как запустить тестовый файл Rack :: Test, который я создаю. –

27

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

Учитывая 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 
+0

Я ценю решение. Не могли бы вы рассказать мне, почему мы используем метод «приложение» здесь? –

0

Я разместил small example на основе psyho's answer. Я также добавил поддержку 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 

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

# 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 
Смежные вопросы