Интеграционный тест Rails 3 завершается с ошибкой 406 для простого запроса HTML - PullRequest
1 голос
/ 31 августа 2011

У меня есть интеграционный тест, который отправляет простой GET-запрос в действие 'show'. Я получаю, когда я assert_response: success, он терпит неудачу, потому что ответ 406, что означает, что Неприемлемый 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 \" => {\ "Формат \" => \ "1 \", \ "action \" => \ "index \", \ "controller \" => \ "docs \"}, \ "Rack.session \" => {\ "origin_url \" => \ "/ docs.1? = Формат HTML \", \ "Session_id \" => \ "6e0e0be703a2c2accf15121b1eb56668 \"}, \ "Rack.test \" => правда, \ "HTTP_ACCEPT \" => \ "текст / XML, приложения / XML, приложение / XHTML + XML, текст / HTML; д = 0,9, текст / обычный; д = 0,8, изображение / PNG, / ; д = 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 \" => {\ "Формат \" => \ "HTML \"}, \ "Action_dispatch.request.unsigned_session_cookie \" => {\ "origin_url \" => \ "/ \", \ "Session_id \" => \ "6e0e0be703a2c2accf15121b1eb56668 \"}, \ "CONTENT_TYPE \" => \ "применение / х-WWW-форм-urlencoded \", \ "HTTPS \" => \ "off \", \ "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 \" => {: Формат => \ "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 \" => {}, \ "Rack.request.form_vars \" => \ "\", \ "Action_dispatch.cookies \" => {\ "_ id_session \" => \ "BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg = - 529dbf0f8e243c4830526f37adb777bd9fba49fd \"}, \ "REQUEST_URI \" => \ "/ docs.1 \", \ "rack.multiprocess \" => true, \ "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 = Край, хром = 1 \", \ "X-Runtime \" => \ "0.013935 \", \ "Content-Type \" => \ "text / html; кодировка = UTF-8 \», \ "\ Cookie Set-" => \ "_ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg% 3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd; Путь = /; HttpOnly \ ", \" Cache-Control \ "=> \" no-cache \ "}, @ block = nil, @ Писатель = #, @ blank = true, @ send_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 = # => {\ "раскладок \" => {\ "нав \" => {истина => [приложение / просмотров / макеты / _nav.html.haml]}, \ "Приложения \" => {ложь => [приложение / просмотров / макеты / application.html.haml]}, \ "Docs \" => {ложь => []}}, \ "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 = {: format => [: 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 =>: пользователь,: fail_app => Devise :: FailureApp,: intercept_401 => false,: default_strategies => {: user => [: запоминаемый,: database_authenticatableable]},: 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-совместимый \" => \ "IE = Edge, chrome = 1 \", \ "Content-Type \" =>\ "текст / html;кодировка = UTF-8 \ "\ "X-время выполнения \"=> \ "0,013935 \", \ "Set-Cookie \"=> \" _ id_session = BAh7ByIPb3JpZ2luX3VybCIYL2RvY3MuMT9mb3JtYXQ9aHRtbCIPc2Vzc2lvbl9pZCIlNmUwZTBiZTcwM2EyYzJhY2NmMTUxMjFiMWViNTY2Njg% 3D - 529dbf0f8e243c4830526f37adb777bd9fba49fd;Путь = /;HttpOnly \ ", \" Cache-Control \ "=> \" no-cache \ "}, @ block = nil, @ writer = #, @ blank = false, @ sent_file = false, @ etag = nil, @ content_type =#, @cookie = []> "

, тест 'go_to_home' работает, как и ожидалось.Использование страницы в среде разработки на моем компьютере также работает нормально.Вот вывод консоли сервера:

Запущен GET "/ docs / 1" для 127.0.0.1 в среду, 31 августа 05:19:20 +0200 2011 Обработка DocsController # показать как параметры HTML: {"id" => "1"}
Загрузка документа (1,0 мс) SELECT docs. * ОТ docs ГДЕ docs. id = 1 ПРЕДЕЛ 1 Пользовательская нагрузка (1,4 мс) SELECT 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. * ОТ prints ГДЕ prints. image_id = 1 И prints. doc_id = 1 ОГРАНИЧЕНИЕ 1 Рендеринг макетов / _nav.html.haml (8,5 мс) Рендеринг документов/show.html.haml в макетах / приложении (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 Doc Load (16,1 мс) SELECT docs. * FROM docs Загрузка страны (0,7 мс) SELECT countries. * FROM countries WHERE countries. id = 1 LIMIT 1 CACHE(1,2 мс) ВЫБРАТЬ countries. * ОТ countries ГДЕ countries. id = 1 ПРЕДЕЛ 1 Страна нагрузки (0,6 мс) ВЫБРАТЬ countries. * ОТ countries ГДЕ countries. id= 2 ПРЕДЕЛ 1
Загрузка страны (0,6 мс) ВЫБРАТЬ countries. * ОТ countries ГДЕ countries. id = 8 ПРЕДЕЛ 1 Загрузка страны (0,6 мс) ВЫБРАТЬ countries. * ОТ countries WHERE countries. id = 18 LIMIT 1 Отображение javascripts / dynamic_docs.js.erb (216,0 мс) завершено 200 ОК за 270 мс (просмотров: 238,2 мс |ActiveRecord: 19,8 мс)

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

Есть идеи?Заранее спасибо

1 Ответ

0 голосов
/ 31 августа 2011

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

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

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

...