【问题标题】:Sinatra tests always 404'ingSinatra 测试总是 404'ing
【发布时间】:2011-08-17 15:17:15
【问题描述】:

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

宝石文件

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

为什么我不能让这个通常非常简单的事情发挥作用?

【问题讨论】:

  • 当您将测试中的 @app ||= Sinatra::Application 替换为:@app ||= App 时,您是否仍然得到 404?

标签: ruby testing sinatra rack


【解决方案1】:

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

我通过在“app”函数中给出另一个返回来解决它。

class IndexClassTest < Test::Unit::TestCase

  def app
      @app = Foxydeal #appname NOT Sinatra::Application
  end
...
  1. 还有

Sinatra::Synchrony.patch_tests!

似乎已经过时了。

【讨论】:

  • 这对我有用。我正在使用 rspec 并且能够仅返回应用程序名称而无需将其分配给实例变量。
【解决方案2】:

在您的 app_test.rb 下执行此操作,而不是您现在拥有的:

  def app
     @app ||= App.new
  end

这将适用于您的班级风格,就像您在开始时一样,无需切换到非班级/模块化风格。

【讨论】:

    【解决方案3】:

    这似乎合乎逻辑,但您的路线配置正确吗?如果路由配置不正确,会左右抛出 404 错误。

    【讨论】:

    【解决方案4】:

    想通了。

    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
    

    【讨论】:

    • 在同一个文件/项目中同时使用类/模块化样式和非类样式似乎不是很“干净”。也许试试我在其他评论中写的!
    【解决方案5】:

    你可以这样做:

    class AppTest < Test::Unit::TestCase
    
    def app
      Sinatra::Application
    end
    

    您可以通过阅读Learning From the Masters: Sinatra InternalsRack::Test 来深入了解sinatra 测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2013-09-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2016-05-21
      相关资源
      最近更新 更多