【发布时间】:2011-08-31 03:53:38
【问题描述】:
我有一个集成测试,向“显示”操作发送一个简单的 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\"=>真, \"HTTP_ACCEPT\"=>\"text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5\", \"HTTP_HOST\"=>\"www.example.com\", \"SERVER_NAME\"=>\"www.example.com\", \"rack.request.cookie_hash\"=>{\"_id_session\"=>\"BAh7ByIPb3JpZ2luX3VybCIGLyIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg=--ceb0f44d2ac8df81c888e002abb7e9d, \"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\"=>\"application/x-www-form-urlencoded\", \"HTTPS\"=>\"off\", \"rack.errors\"=>#, \"action_dispatch.secret_token\"=>\"8922d5d0a3e706818581l8cc2d42d9ce584ba6350de71e6afc49b2ad7d3d05c6e763db2615fca9eb123c51b57223d955a5199b60c20e5efb40a\848 \"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--ceb0f44d2ac8df81c888e005abb7e9d1df02e \"SCRIPT_NAME\"=>\"\", \"action_dispatch.parameter_filter\"=>[:password, :data], \"action_dispatch.show_exceptions\"=>假, \"HTTP_COOKIE\"=>\"_id_session=BAh7ByIPb3JpZ2luX3VybCIGLyIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D--ceb0f44d2ac8df81c888e005abb7e9d1df02e802\" \"rack.multithread\"=>真, \"action_dispatch.request.request_parameters\"=>{}, \"rack.request.form_vars\"=>\"\", \ “action_dispatch.cookies \”=> {\ “_ id_session \”=> \ “BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg = - 529dbf0f8e243c4830526f37adb777bd9fba49fd \”}, \"REQUEST_URI\"=>\"/docs.1\", \"rack.multiprocess\"=>true, \"rack.request.query_hash\"=>{\"format\"=>\"html\"}, \"rack.request.form_input\"=>#, \"SERVER_PORT\"=>\"80\", \"action_controller.instance\"=>#\"1\", \"action\"=>\"index\", \"控制器\"=>\"docs\"},@env={...}>,@cache_control={},@body=[\" \"], @status=406, @length=0, @charset=\"utf-8\", @header={\"X-UA 兼容\"=>\"IE=Edge,chrome=1\", \"X-Runtime\"=>\"0.013935\", \"Content-Type\"=>\"text/html; 字符集=utf-8\", \ “的Set-Cookie \”=> \“_ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd; 路径=/; HttpOnly\", \"Cache-Control\"=>\"no-cache\"}, @block=nil, @作家=#, @blank=true,@sending_file=false,@etag=nil, @content_type=#, @cookie=[]>, @_headers={\"Content-Type\"=>\"text/html\"}, @docs=[#, #, #, #, #, #], @_config=# , @国家=[#, #, #], @continents=[#, #], @_action_name=\"index\", @_request=#\"1\", \"action\"=>\"index\", \"controller\"=>\"docs\"}, @env={...}>, @lookup_context=#=>{\"layouts\"=>{\"nav\"=>{true=>[app/views/layouts/_nav.html.haml]}, \"应用\"=>{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\"=>\"格式=html\", \"rack.input\"=>#}>"
这是 response.inspect 输出:
"#true},@body=[\"\"],@status=406, @length=0, @charset=\"utf-8\", @header={\"X-UA 兼容\"=>\"IE=Edge,chrome=1\", \"内容类型\"=>\"text/html; charset=utf-8\", \"X-运行时\"=>\"0.013935\", \ “的Set-Cookie \”=> \“_ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg%3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd; 路径=/; HttpOnly\", \"Cache-Control\"=>\"no-cache\"}, @block=nil, @作家=#, @blank=false,@sending_file=false,@etag=nil, @content_type=#, @cookie=[]>"
“goes_to_home”测试按预期工作。在我的电脑上的开发环境中使用该页面也可以正常工作。这是服务器控制台输出:
于 2011 年 8 月 31 日星期三 05:19:20 +0200 开始为 127.0.0.1 获取“/docs/1” 由 DocsController#show 处理为 HTML 参数:{"id"=>"1"}
文档加载 (1.0ms) SELECTdocs.* FROMdocsWHEREdocs.id= 1 限制 1 个用户负载 (1.4ms) SELECTusers.* FROMusersWHEREusers.id= 2 LIMIT 1 SQL (1.0ms) SELECT COUNT(*) FROMimagesWHERE (images.user_id = 2) 缓存 (0.0ms) SELECT COUNT(*) FROMimagesWHERE (images.user_id = 2) 图像加载 (1.9ms) 选择images.* FROMimagesWHERE (images.user_id = 2) ORDER BY updated_at DESC LIMIT 1 打印负载 (0.9ms) SELECTprints.* FROMprints其中prints.image_id= 1 和prints.doc_id= 1 限制 1 渲染布局/_nav.html.haml (8.5ms) 渲染文档/show.html.haml 在布局/应用程序内(172.7 毫秒)在 410 毫秒内完成 200 OK(查看次数: 225.0ms |活动记录:6.2 毫秒)于 8 月 31 日星期三开始为 127.0.0.1 获取“/javascripts/dynamic_docs.js” 05:19:21 +0200 2011 由 JavascriptsController#dynamic_docs 处理 as JS Doc Load (16.1ms) SELECT
docs.* FROMdocsCountry Load (0.7ms) 选择countries.* FROMcountriesWHEREcountries.id= 1 限制 1 缓存 (1.2ms) 选择countries.* FROMcountriesWHEREcountries.id= 1 LIMIT 1 Country Load (0.6ms) SELECTcountries.* FROMcountriesWHEREcountries.id= 2 限制 1
国家负载 (0.6ms) SELECTcountries.* FROMcountriesWHEREcountries.id= 8 LIMIT 1 Country Load (0.6ms) SELECTcountries.* 来自countries其中countries.id= 18 限制 1 渲染 javascripts/dynamic_docs.js.erb (216.0ms) 完成 200 OK in 270 毫秒(查看次数:238.2 毫秒 | ActiveRecord:19.8 毫秒)于 8 月 31 日星期三开始为 127.0.0.1 获取“/image_for/US-Passport/1.jpg” 05:19:21 +0200 2011《美国护照》 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) SELECTusers.* FROMusersWHEREusers.id= 2 LIMIT 1 图像加载 (0.9ms) SELECTimages.* FROMimagesWHEREimages.id= 1 AND (images.user_id = 2) ORDER BY updated_at DESC LIMIT 1 Doc Load (1.0ms) SELECTdocs.* FROMdocsWHEREdocs.name= 'US Passport' LIMIT 1 渲染文本模板 (0.1ms) 发送数据 orange.jpg (13.2ms) 完成 200 OK in 371ms (Views: 12.9ms |活动记录:3.9 毫秒)
有什么想法吗? 提前致谢
【问题讨论】:
标签: ruby-on-rails-3 testing integration-testing http-status-code-406