Я не знаю, как проверить мое приложение Sinatra. Я просто запускаю
ruby
Это не работает. Все файлы там говорят только о том, как писать содержимое файла, но не о том, как его запустить.
Спасибо
Я не знаю, как проверить мое приложение Sinatra. Я просто запускаю
ruby
Это не работает. Все файлы там говорят только о том, как писать содержимое файла, но не о том, как его запустить.
Спасибо
Должно быть достаточно простым.
Учитывая 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
Я разместил небольшой пример на основе ответа psyho. Я также добавил поддержку ActiveRecord, включая тестовые приборы.
Я настроил rake для запуска тестов:
# 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 Writing")
assert_equal "Rob Writing", blog.name
end
def test_find
blog = Blog.find_by_name("Jimmy 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
Должно быть так же просто, как ruby your_app_name.rb
. Фактически, это показано на домашняя страница Sinatra (внизу).