Sinatra测试总是404'

时间:2011-08-17 15:17:15

标签: ruby testing sinatra rack

我有一个非常简单的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 个答案:

答案 0 :(得分:6)

我遇到了相同的问题,只有HTTP-404作为回报。

我在“app”功能中给出了另一个回复来解决它。

class IndexClassTest < Test::Unit::TestCase

  def app
      @app = Foxydeal #appname NOT Sinatra::Application
  end
...
  1. 另外
  2. Sinatra::Synchrony.patch_tests!

    似乎已经过时了。

答案 1 :(得分:2)

在你的app_test.rb下执行此操作而不是现在的操作:

  def app
     @app ||= App.new
  end

这将与您在开始时使用的类样式一起使用,无需切换到非类/模块化样式。

答案 2 :(得分:0)

看起来似乎合乎逻辑,但您的路线配置是否正确?如果未正确配置路由,则会向左和向右抛出404错误。

答案 3 :(得分:0)

想出来。

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

答案 4 :(得分:0)

您可以这样做:

class AppTest < Test::Unit::TestCase

def app
  Sinatra::Application
end

通过阅读Learning From the Masters: Sinatra InternalsRack::Test

,您可以深入了解sinatra测试