Синатра испытывает всегда 404'ing - PullRequest
3 голосов
/ 17 августа 2011

У меня есть очень простое приложение Sinatra, которое я испытываю с трудностями при тестировании.

По сути, каждый отдельный тест запроса возвращает 404, когда я узнаю из тестирования в браузере, что запрос работает нормально.Любые идеи относительно того, в чем может быть проблема?

test_helper.rb:

ENV["RACK_ENV"] = 'test'

$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
require 'app'
Sinatra::Synchrony.patch_tests!

class Test::Unit::TestCase
  include Rack::Test::Methods
end

app_test.rb

require 'test_helper'
class AppTest < Test::Unit::TestCase 
  def app
    @app ||= Sinatra::Application
  end
  def test_it_says_hello
    get "/"
    assert_equal 200,  last_response.status
  end
end

app.rb

$: << 'config'
require "rubygems" require "bundler"

ENV["RACK_ENV"] ||= "development" 
Bundler.require(:default, ENV["RACK_ENV"].to_sym) 
require ENV["RACK_ENV"]

class App < Sinatra::Base   register Sinatra::Synchrony
  get '/' do
    status 200
    'hello, I\'m bat shit crazy and ready to rock'   
  end
end

Gemfile

source :rubygems

gem 'daemons'
gem 'sinatra'
gem 'sinatra-synchrony', :require => 'sinatra/synchrony' 
gem 'resque'
gem 'thin'

group :test do
  gem 'rack-test', :require => "rack/test"
  gem 'test-unit', :require => "test/unit" 
end

Почему я не могу заставить эту обычно очень простую вещь работать?

Ответы [ 5 ]

6 голосов
/ 25 апреля 2012

У меня была точно такая же проблема с возвращением только HTTP-404.

Я решил ее с помощью еще одного возврата в функции "app".

class IndexClassTest < Test::Unit::TestCase

  def app
      @app = Foxydeal #appname NOT Sinatra::Application
  end
...
  1. Также

Sinatra::Synchrony.patch_tests!

представляется устаревшим.

2 голосов
/ 13 ноября 2011

В вашем app_test.rb сделайте это вместо того, что у вас есть сейчас:

  def app
     @app ||= App.new
  end

Это будет работать с вашим стилем класса, как в начале, не нужно переключаться накласс / модульный стиль.

0 голосов
/ 09 мая 2012

Вы можете просто сделать это:

class AppTest < Test::Unit::TestCase

def app
  Sinatra::Application
end

Вы можете получить полное представление о тестах синатры, прочитав Обучение у мастеров: Sinatra Internals и Rack :: Test

0 голосов
/ 17 августа 2011

Разобрался.

app.rb

$: << 'config'
require "rubygems" require "bundler"

ENV["RACK_ENV"] ||= "development" Bundler.require(:default,
ENV["RACK_ENV"].to_sym) require ENV["RACK_ENV"]

class App < Sinatra::Base   
  register Sinatra::Synchrony
end

get '/' do
  status 200
  'hello, I\'m bat shit crazy and ready to rock'   
end
0 голосов
/ 17 августа 2011

Может показаться логичным, но правильно ли настроены ваши маршруты? Если маршрут настроен неправильно, он выдаст 404 ошибки влево и вправо.

...