1

我有一个集成测试,向“显示”操作发送一个简单的 GET 请求。当我 assert_response :success 时我得到一个,它失败了,因为响应是 406,这意味着格式是Not Acceptable HTTP

require 'test_helper'

class UserFlowsTest < ActionDispatch::IntegrationTest
  fixtures :continents, :countries, :types

  test "browse register order" do
    docs = make_docs
    assert_equal Doc.count, docs.length, "Docs not created properly"
    bob=new_session_as(:bob)
    bob.goes_to_home
    bob.goes_to_doc(1)
  end

  private

  module TestDSL
    def goes_to_home
      get root_url
      test_results("docs/index")
    end

    def goes_to_doc(id)
      get docs_url(id), #{:format => :html} - fails with this as well...
      y request.inspect
      p response.inspect
      test_results("docs/show")
    end

    def test_results(path)
      assert_response :success, "Checking #{path}"
      assert_template path
    end
  end #module TestDSL



  def new_session_as(person)
    new_session do |sess|
      #sess.goes_to_login
      #sess.logs_in_as(person)
      yield sess if block_given?
    end
  end

  def new_session
    open_session do |sess|
      sess.extend(TestDSL)
      yield sess if block_given?
    end
  end

end

这是 request.inspect 输出:

--- "#[], \"action_dispatch.request.parameters\"=>{\"format\"=>\"1\", \"action\"=>\"index\", \"controller\ "=>\"docs\"}, \"rack.session\"=>{\"origin_url\"=>\"/docs.1?format=html\", \"session_id\"=>\"6e0e0be703a2c2accf15121b1eb56668 \"}, \"rack.test\"=>true, \"HTTP_ACCEPT\"=>\"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain; q=0.8,图像/png, /;q=0.5\", \"HTTP_HOST\"=>\"www.example.com\", \"SERVER_NAME\"=>\"www.example.com\", \"rack.request.cookie_hash\" => {\ “_ id_session \”=> \ “BAh7ByIPb3JpZ2luX3VybCIGLyIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg = - ceb0f44d2ac8df81c888e005abb7e9d1df02e802 \”},\ “action_dispatch.remote_ip \”=>#,\ “CONTENT_LENGTH \”=> \ “0 \”,\“rack.url_scheme \"=>\"http\", \"action_dispatch.request.query_parameters\"=>{\"format\"=>\"html\"}, \"action_dispatch.request.unsigned_session_cookie\"=>{\" origin_url\"=>\"/\", \"session_id\"=>\"6e0e0be703a2c2accf15121b1eb56668\"}, \"CONTENT_TYPE\"=>\"应用程序/ x-WWW窗体-urlencoded \” \ “HTTPS \”=> \ “关闭\”,\ “rack.errors \”=>#,\ “action_dispatch.secret_token \”=> \ “8922d5d0a3e706818581l8cc2d42d9ce584ba6350de71e6afc49b2ad7d3d05c6e763db2615fca9eb123c51b57223d955a5199b60c20e5efb4be14888a4e3520a2 \” , \"REMOTE_ADDR\"=>\"127.0.0.1\", \"PATH_INFO\"=>\"/docs.1\", \"rack.version\"=>[1, 1], \"rack .run_once\"=>false, \"action_dispatch.request.path_parameters\"=>{:format=>\"1\", :controller=>\"docs\", :action=>\"index\"} , \"rack.request.cookie_string\"=>\"_id_session = BAh7ByIPb3JpZ2luX3VybCIGLyIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - ceb0f44d2ac8df81c888e005abb7e9d1df02e802 \”,\ “SCRIPT_NAME \”=> \ “\” \ “action_dispatch.parameter_filter \”=> [:密码,:数据],\ “action_dispatch.show_exceptions \”=>假,\ “HTTP_COOKIE \”=> \ “_ id_session = BAh7ByIPb3JpZ2luX3VybCIGLyIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - ceb0f44d2ac8df81c888e005abb7e9d1df02e802 \”,\ “rack.multithread \”=>真,\ “action_dispatch.request.request_parameters \”=> {},\“机架。 request.form_vars\"=>\"\", \"action_dispatch.cookies\"=>{\"_id_session\"=>\"BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg = - 529dbf0f8e243c4830526f37adb777bd9fba49fd \ “},\” REQUEST_URI \ “=> \”/ docs.1 \ “\ ”rack.multiprocess \“=>真,\ ”rack.request.query_hash \“=> {\”格式\"=>\"html\"}, \"rack.request.form_input\"=>#, \"SERVER_PORT\"=>\"80\", \"action_controller.instance\"=>#\" 1\", \"action\"=>\"index\", \"controller\"=>\"docs\"}, @env={...}>, @cache_control={}, @body= [\" \"], @status=406, @length=0, @charset=\"utf-8\", @header={\"X-UA-Compatible\"=>\"IE=Edge,chrome =1\", \"X-运行时\"=>\"0.013935\",\ “内容类型\”=> \ “text / html的;字符集= UTF-8 \”,\ “的Set-Cookie \”=> \ “_ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd;路径= /;的HttpOnly \” , \"缓存控制\"=>\"无缓存\"}, @block=nil, @writer=#, @blank=true, @sending_file=false, @etag=nil, @content_type=#, @ cookie=[]>, @_headers={\"Content-Type\"=>\"text/html\"}, @docs=[#, #, #, #, #, #], @_config=#, @countries=[#, #, #], @continents=[#, #], @_action_name=\"index\", @_request=#\"1\", \"action\"=>\"index\ ", \"控制器\"=>\"docs\"}, @env={...}>, @lookup_context=#=>{\"layouts\"=>{\"nav\"=>{true=>[app/views/layouts/_nav.html.haml]}, \"application\"=>{false=>[app/views/layouts/application.html.haml ]}, \"docs\"=>{false=>[]}}, \"docs\"=>{\"index\"=>{false=>[app/views/docs/index.html.haml ]}}}},@path=\"/home/jon/id/app/views\">,

@cached={#=>{\"layouts\"=>{\"docs\"=>{false=>[]}}}}, @path=\"/home/jon/.rvm/gems/ruby -1.8.7-p334/gems/devise-1.4.2/app/views\">], @details_key=nil, @skip_default_locale=false, @details={:formats=>[:html, :text, :js , :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :handlers=>[:haml, :builder, :erb, :rjs, : rhtml, :rxml], :locale=>[:en, :en]}, @frozen_formats=false>, @doc_types=[#, #], @_status=200, @view_context_class=nil, @action_has_layout=true>, \"rack.session.options\"=>{:secure=>false, :expire_after=>nil, :domain=>nil, :httponly=>true, :id=>\"6e0e0be703a2c2accf15121b1eb56668\", :path=> \"/\"}, \"REQUEST_METHOD\"=>\"GET\", \"warden\"=>Warden::Proxy:-616946978 @config={:default_scope=>:user, :failure_app=>Devise::FailureApp, :intercept_401=>false, :default_strategies=>{:user=>[:rememberable, :database_authenticable]}, : scope_defaults=>{}}, \"rack.request.query_string\"=>\"format=html\", \"rack.request.form_hash\"=>{}, \"action_dispatch.request.content_type\"= >#, \"QUERY_STRING\"=>\"format=html\", \"rack.input\"=>#}>"\"action_dispatch.request.content_type\"=>#, \"QUERY_STRING\"=>\"format=html\", \"rack.input\"=>#}>"\"action_dispatch.request.content_type\"=>#, \"QUERY_STRING\"=>\"format=html\", \"rack.input\"=>#}>"

这是 response.inspect 输出:

"#true},@body=[\"\"],@status=406,@length=0,@charset=\"utf-8\",@header={\"X-UA-Compatible\"= >\"IE=Edge,chrome=1\", \"Content-Type\"=>\"text/html; 字符集= UTF-8 \ “\ ”X-运行\“=> \ ”0.013935 \“ \ ”的Set-Cookie \“=> \” _ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd; 路径=/; HttpOnly\", \"Cache-Control\"=>\"no-cache\"}, @block=nil, @writer=#, @blank=false, @sending_file=false, @etag=nil, @content_type= #, @cookie=[]>"

'goes_to_home' 测试按预期工作。在我的电脑上的开发环境中使用该页面也可以正常工作。这是服务器控制台输出:

2011 年 8 月 31 日星期三 05:19:20 +0200 2011 年 8 月 31 日星期三开始 GET "/docs/1" for 127.0.0.1 由 DocsController#show 作为 HTML 参数处理:{"id"=>"1"}
Doc Load (1.0ms) SELECT docs.*docs从哪里来docsid= 1 LIMIT 1 用户负载 (1.4ms) SELECT users.* FROM usersWHERE usersid= 2 LIMIT 1 SQL (1.0ms) SELECT COUNT(*) FROM images WHERE ( images.user_id = 2) CACHE (0.0ms) SELECT COUNT(*) FROM imagesWHERE ( images.user_id = 2) 图像加载 (1.9ms) SELECT images.* FROM imagesWHERE ( images.user_id = 2) ORDER BY updated_at DESC LIMIT 1 打印负载 (0.9ms) SELECT prints.* FROM printsWHERE printsimage_id= 1 和printsdoc_id= 1 LIMIT 1 渲染布局/_nav.html.haml (8.5ms) 在布局/应用程序中渲染 docs/show.html.haml (172.7ms) 在 410ms 内完成 200 OK (Views: 225.0ms | ActiveRecord: 6.2ms)

于 2011 年 8 月 31 日星期三 05:19:21 +0200 2011 年 8 月 31 日星期三开始为 127.0.0.1 获取“/javascripts/dynamic_docs.js”,由 JavascriptsController#dynamic_docs 作为 JS 文档加载(16.1 毫秒)SELECT docs.* FROM docs Country Load(0.7 毫秒)SELECT countries.*countries从哪里来countriesid = 1 LIMIT 1 CACHE (1.2ms) SELECT countries.* FROM countries WHERE countriesid= 1 LIMIT 1 Country Load (0.6ms) SELECT countries.* FROM countriesWHERE countriesid= 2 LIMIT 1
Country Load (0.6ms) SELECT countries.* FROM countriesWHERE countriesid= 8 LIMIT 1 Country Load (0.6ms) SELECT countries.* FROM countriesWHERE countriesid= 18 LIMIT 1 渲染的 javascripts/dynamic_docs.js.erb (216.0ms) 在 270ms 内完成 200 OK (Views: 238.2ms | ActiveRecord: 19.8ms)

2011 年 8 月 31 日星期三 05:19:21 +0200 开始为 127.0.0.1 获取“/image_for/US-Passport/1.jpg”“美国护照”30.0“head_top 39”“X:2.65000000000001,Y:28.85,宽度: 222.7,高度:222.7" 由 DocsController#image_for 作为 HTML
参数处理:{"image_id"=>"1", "name"=>"US-Passport"} 用户负载 (2.0ms) SELECT users.* FROM usersWHERE usersid= 2 LIMIT 1 图像加载 (0.9ms) SELECT images.* FROM imagesWHERE imagesid= 1 AND ( images.user_id = 2) ORDER BY updated_at DESC LIMIT 1 Doc Load (1.0ms) SELECT docs.* FROM docsWHERE docsname= 'US Passport' LIMIT 1 渲染文本模板 (0.1ms) 发送数据 orange.jpg (13.

有任何想法吗?提前致谢

4

1 回答 1

0

这个问题是由于在“get”调用中使用了错误的路径引起的。

由于某种原因 docs_url(@doc) 产生“/docs.7”而不是“/docs/7”

我已经就这个主题打开了一个单独的问题

于 2011-08-31T19:17:11.807 回答