Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使用机架/测试测试Sinatra重定向?该应用程序可以工作,但测试不能 看来要么我缺少了一些非常基本的东西,要么机架/测试无法应对Sinatra进行重定向。_Ruby_Sinatra_Rspec2_Rack Test - Fatal编程技术网

Ruby 如何使用机架/测试测试Sinatra重定向?该应用程序可以工作,但测试不能 看来要么我缺少了一些非常基本的东西,要么机架/测试无法应对Sinatra进行重定向。

Ruby 如何使用机架/测试测试Sinatra重定向?该应用程序可以工作,但测试不能 看来要么我缺少了一些非常基本的东西,要么机架/测试无法应对Sinatra进行重定向。,ruby,sinatra,rspec2,rack-test,Ruby,Sinatra,Rspec2,Rack Test,大概有办法解决这个问题,否则机架/测试将毫无用处。谁能告诉我我应该怎么做才能让它在这里工作 编辑:我最终想要实现的是测试我最终得到的页面,而不是状态。在测试中,最后一个_响应对象指向我的应用程序中不存在的页面,当然不是运行它时实际获得的页面 示例应用程序: require 'sinatra' require 'haml' get "/" do redirect to('/test') end get '/test' do haml :test end 这正如您所期望的那样有效。转到

大概有办法解决这个问题,否则机架/测试将毫无用处。谁能告诉我我应该怎么做才能让它在这里工作

编辑:我最终想要实现的是测试我最终得到的页面,而不是状态。在测试中,最后一个_响应对象指向我的应用程序中不存在的页面,当然不是运行它时实际获得的页面

示例应用程序:

require 'sinatra'
require 'haml'

get "/" do
  redirect to('/test')
end

get '/test' do
  haml :test
end
这正如您所期望的那样有效。转到“/”或“/test”将获得views/test.haml的内容

但这项测试不起作用:

require_relative '../app.rb'
require 'rspec'
require 'rack/test'

describe "test" do
  include Rack::Test::Methods

  def app
    Sinatra::Application
  end

  it "tests" do
    get '/'
    expect(last_response.status).to eq(200)
  end
end
这是运行测试时发生的情况:

1) test tests
   Failure/Error: expect(last_response.status).to eq(200)

     expected: 200
          got: 302
这就是最后一个_response.inspect的样子:

#<Rack::MockResponse:0x000000035d0838 @original_headers={"Content-Type"=>"text/html;charset=utf-8", "Location"=>"http://example.org/test", "Content-Length"=>"0", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "X-Frame-Options"=>"SAMEORIGIN"}, @errors="", @body_string=nil, @status=302, @header={"Content-Type"=>"text/html;charset=utf-8", "Location"=>"http://example.org/test", "Content-Length"=>"0", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "X-Frame-Options"=>"SAMEORIGIN"}, @chunked=false, @writer=#<Proc:0x000000035cfeb0@/home/jonea/.rvm/gems/ruby-1.9.3-p547@sandbox/gems/rack-1.5.2/lib/rack/response.rb:27 (lambda)>, @block=nil, @length=0, @body=[]>
我想知道Rack/Test是否只是任意决定插入重定向?

您的测试是错误的

获取重定向的状态代码为302。因此,正确的测试是:

expectlast_response.status.to eq302

也许更好的检查方法是断言最后的响应。好吗

或者像下面的例子:

是的,这总是example.org,因为你得到的是模拟的而不是真实的响应

你的测试错了

获取重定向的状态代码为302。因此,正确的测试是:

expectlast_response.status.to eq302

也许更好的检查方法是断言最后的响应。好吗

或者像下面的例子:


是的,这总是example.org,因为你得到的是模拟的而不是真实的响应

正如@sirl33tname所指出的,重定向仍然是重定向,因此我所能期望的最佳状态是302,而不是200。如果我想测试我是否在重定向的末尾得到了一个好的页面,我应该测试ok?而不是现状

但是,如果我想测试我最终得到的URL,我需要做更多的工作,因为Rack/test基本上是一个模拟系统,在重定向时返回一个页面的模拟,而不是实际页面

但事实证明,使用follow\u redirect!可以很容易地覆盖它

测试变成:

it "tests" do
  get '/'
  follow_redirect!
  expect(last_response.status).to be_ok

  # ...and now I can test for the contents of test.haml, too...
  expect(last_response.body).to include('foo')
end

这就是工作

正如@sirl33tname所指出的,重定向仍然是重定向,因此我所能期望的最佳状态是302,而不是200。如果我想测试我是否在重定向的末尾得到了一个好的页面,我应该测试ok?而不是现状

但是,如果我想测试我最终得到的URL,我需要做更多的工作,因为Rack/test基本上是一个模拟系统,在重定向时返回一个页面的模拟,而不是实际页面

但事实证明,使用follow\u redirect!可以很容易地覆盖它

测试变成:

it "tests" do
  get '/'
  follow_redirect!
  expect(last_response.status).to be_ok

  # ...and now I can test for the contents of test.haml, too...
  expect(last_response.body).to include('foo')
end

这就是工作

另一种方法是测试最后一个响应。标题['Location']

另一种方法是测试最后一个响应。标题['Location']

最后一个响应。好吗?expectlast_response.to beok也失败了,因为我认为,它也在测试状态。也许我可以更清楚地说明更重要的一点——我想测试我最终得到的页面。Rack/Test返回一些不存在的页面,而不是实际应用程序运行时重定向到的页面。为什么?我的理解是,您为重定向编写了一个测试,为实际站点和您的应用程序编写了一个测试good@AndyJones我同意Sir l33tname的说法,您不需要测试重定向页面,只要302返回正确的重定向位置即可。您可以单独测试该位置。@sirl33tname-我是-它不工作-有关详细信息,请重新阅读问题…last_response.ok?expectlast_response.to beok也失败了,因为我认为,它也在测试状态。也许我可以更清楚地说明更重要的一点——我想测试我最终得到的页面。Rack/Test返回一些不存在的页面,而不是实际应用程序运行时重定向到的页面。为什么?我的理解是,您为重定向编写了一个测试,为实际站点和您的应用程序编写了一个测试good@AndyJones我同意Sir l33tname的说法,您不需要测试重定向页面,只要302返回正确的重定向位置即可。您可以单独测试该位置。@sirl33tname-我是-它不起作用-有关详细信息,请重新阅读问题。。。