Интеграционный тест Rails 3 завершается неудачно с ответом 406 на простой html-запрос

У меня есть интеграционный тест, который отправляет простой запрос 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:

@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::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\"=>#}>"

и вот вывод 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» работает, как и ожидалось. Использование страницы в среде разработки на моем компьютере также работает нормально. Вот вывод консоли сервера:

Начат GET "/docs/1" для 127.0.0.1 в среду, 31 августа, 05:19:20 +0200 2011 Обработка DocsController#show as HTML Параметры: {"id"=>"1"}
Doc Load (1.0 мс) ВЫБЕРИТЕ docs.* ИЗ docs ГДЕ docs.id = 1 ОГРАНИЧЕНИЕ 1 Пользовательская нагрузка (1,4 мс) ВЫБЕРИТЕ users.* ИЗ users ГДЕ users.id = 2 ОГРАНИЧЕНИЕ 1 SQL (1,0 мс) ВЫБЕРИТЕ СЧЕТ(*) ИЗ images ГДЕ ( images.user_id = 2) КЭШ (0,0 мс) ВЫБЕРИТЕ СЧЕТ(*) ОТ images ГДЕ (images.user_id = 2) Загрузка изображения (1,9 мс) ВЫБЕРИТЕ images.* ОТ images ГДЕ (images.user_id = 2) ЗАКАЗАТЬ ПО updated_at DESC LIMIT 1 Загрузка печати (0,9 мс) SELECT prints.* FROM prints WHERE prints.image_id = 1 AND prints.doc_id = 1 LIMIT 1 Визуализация layouts/_nav.html.haml (8,5 ms) Визуализация docs/show.html.haml в макетах /application (172,7 мс) Завершено 200 OK за 410 мс (Просмотры: 225,0 мс | ActiveRecord: 6,2 мс)

Запущен GET "/javascripts/dynamic_docs.js" для 127.0.0.1 в среду, 31 августа, 05:19:21 +0200 2011 Обработка JavascriptsController#dynamic_docs как загрузка документов JS (16,1 мс) SELECT docs.* FROM docs Country Load (0,7 мс ) ВЫБЕРИТЕ countries.* ИЗ countries ГДЕ countries.id = 1 ОГРАНИЧЕНИЕ 1 КЭШ (1,2 мс) ВЫБЕРИТЕ countries.* ИЗ countries ГДЕ countries.id = 1 ОГРАНИЧЕНИЕ 1 Загрузка страны (0,6 мс) ВЫБЕРИТЕ countries.* ИЗ countries ГДЕ countries.id = 2 LIMIT 1
Country Load (0,6 мс) SELECT countries.* FROM countries WHERE countries.id = 8 LIMIT 1 Country Load (0,6 мс) SELECT countries.* FROM countries WHERE countries.id = 18 LIMIT 1 Rendered javascripts/ dynamic_docs.js.erb (216,0 мс) Завершено 200 OK за 270 мс (просмотры: 238,2 мс | ActiveRecord: 19,8 мс)

Начат GET "/image_for/US-Passport/1.jpg" для 127.0.0.1 в среду, 31 августа, 05:19:21 +0200 2011 "US Passport" 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,0 мс) SELECT users.* FROM users ГДЕ users.id = 2 ОГРАНИЧЕНИЕ 1 Загрузка изображения (0,9 мс) ВЫБЕРИТЕ images.* ИЗ images ГДЕ images.id = 1 И (images.user_id = 2) ORDER BY updated_at DESC LIMIT 1 Загрузка документа (1,0 мс) ВЫБЕРИТЕ docs. * FROM docs WHERE docs.name = 'US Passport' LIMIT 1 Визуализированный текстовый шаблон (0,1 мс) Отправленные данные Orange.jpg (13,2 мс) Завершено 200 OK за 371 мс (Просмотры: 12,9 мс | ActiveRecord: 3,9 мс)

Любые идеи? заранее спасибо

Эта проблема вызвана использованием неправильного пути в вызове get.


person CHsurfer    schedule 31.08.2011    source источник


Ответы (1)


по какой-то причине docs_url(@doc) выдает "/docs.7" вместо "/docs/7"

Я открыл отдельный вопрос по этой теме.

--- "#[], \"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,image/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\"=>\" применение/ х-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.re quest.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\", \ "действие\"=>\"индекс\", \"контроллер\"=>\"документы\"}, @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 \"=> \" нет кэша \ "}, @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\", \"controller\"=>\"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 /просмотры\">,

person CHsurfer    schedule 31.08.2011