Подтвердить что ты не робот

Как вы проводите тесты в Синатре?

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

ruby ​​

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

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

Я разместил небольшой пример на основе ответа 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