функциональный тест, отправляющий данные файла в параметрах, не работает после перехода с 3.0/1.8.7 на 3.2/1.9.2

Я переношу приложение rails 3.0 на ruby ​​​​1.8.7 в приложение 3.2 на 1.92. Все тесты проходят, кроме одного. Ниже много текста, но проблему не сложно увидеть. Я просто должен был быть немного многословным.

У меня есть модель электронной почты, в которой есть_много загрузок, которые представляют собой файлы, обрабатываемые с помощью Paperclip. У меня есть тест создания, который работал в 3.0/1.8.7, который отправлял вложенные атрибуты для загружаемого файла с использованием локального файла. Для теста я использовал Gemfile, так как он маленький и всегда будет в моем репозитории.

Тест пишется так:

creatable_attributes = creatable_resource.attributes.merge( {"uploads_attributes"=>[{"name"=>"", "member_id"=>"764", "file"=>File.new('Gemfile')}]} )

post :create, post_var => creatable_attributes 

Теперь я покажу вам отладочную информацию для трех вещей: для ОБИХ веток репозитория (3.0/1.8.7 и 3.2/1.92). Вы увидите ключевое отличие, из-за которого вложенная загрузка не сохранить, и я не знаю, как это исправить.

1) Данные, отправленные, как они видны ПЕРЕД ОТПРАВКОЙ, в тесте 2) Данные, как они видны в принимающем контроллере 3) Соответствующая загрузка, созданная в контроллере

*3.0/1.8.7 -- "рабочая" версия *

1) Данные, отправленные, как видно ПЕРЕД ОТПРАВКОЙ, в тесте

{
    "uploads_attributes" => [
        [0] {
                 "file" => #<File:Gemfile> -rw-r--r--  1 benlieb  staff  2506 Jan 26 13:15 Gemfile,
            "member_id" => "764",
                 "name" => ""
        }
    ],
            "created_at" => nil,
               "subject" => "string_28636",
         "markup_filter" => nil,
             "member_id" => 6891662,
                  "body" => "string_29201",
            "updated_at" => nil
}

2) Параметры, видимые в принимающем контроллере

{
    "controller" => "emails",
         "email" => {
        "uploads_attributes" => [
            [0] {
                     "file" => #<File:Gemfile>   -rw-r--r--  1 benlieb  staff  2506 Jan 26 13:15 Gemfile,
                "member_id" => "764",
                     "name" => ""
            }
        ],
                "created_at" => nil,
                   "subject" => "string_28636",
                 "member_id" => 6891662,
             "markup_filter" => nil,
                "updated_at" => nil,
                      "body" => "string_29201"
    },
        "action" => "create"
}

3) Соответствующая загрузка, созданная в контроллере (это работает и сохраняется)

[
    [0] #<Upload:0x104a9b168> {
                       :id => nil,
                     :name => "",
                :member_id => 764,
           :file_file_name => "Gemfile",
        :file_content_type => "text/plain",
           :file_file_size => 2506,
          :file_updated_at => Sat, 26 Jan 2013 13:16:51 EST -05:00,
               :created_at => nil,
               :updated_at => nil
    }
]

*3.2/1.9.2 — "неудачная" версия *

1) Данные, отправленные ДО ОТПРАВКИ, в тесте (обратите внимание, что файл такой же, как 3.0/1.9.2)

{
                    "id" => nil,
               "subject" => "string_3556259",
                  "body" => "string_35571",
             "member_id" => 1644867,
         "markup_filter" => nil,
            "created_at" => nil,
            "updated_at" => nil,
    "uploads_attributes" => [
        [0] {
                 "name" => "",
            "member_id" => "764",
                 "file" => #<File:Gemfile>   -rw-r--r--  1 benlieb  staff  2828 Jan 26 13:34 Gemfile
        }
    ]
}

2) Параметры, видимые в принимающем контроллере (обратите внимание, что данные файла изменились)

{
         "email" => {
                        "id" => nil,
                   "subject" => "string_3556259",
                      "body" => "string_35571",
                 "member_id" => "1644867",
             "markup_filter" => nil,
                "created_at" => nil,
                "updated_at" => nil,
        "uploads_attributes" => [
            [0] {
                     "name" => "",
                "member_id" => "764",
                     "file" => "#<File:0x0000010343d1f0>"
            }
        ]
    },
    "controller" => "emails",
        "action" => "create"
}

3) Соответствующая загрузка, созданная в контроллере (этот файл не удалось сохранить, что-то пошло не так)

[
    [0] #<Upload:0x000001061aeee0> {
                       :id => nil,
                     :name => "",
                :member_id => 764,
           :file_file_name => nil,
        :file_content_type => nil,
           :file_file_size => nil,
          :file_updated_at => nil,
               :created_at => nil,
               :updated_at => nil
    }
]

И вот несколько файлов для наглядности: https://gist.github.com/4643779

Итак, мой вопрос в том, что происходит и как я могу это исправить.


person pixelearth    schedule 26.01.2013    source источник
comment
Решение найдено. Я пока не могу ответить на этот вопрос, но мне пришлось изменить File.new на Rack::Test::UploadedFile.new   -  person pixelearth    schedule 27.01.2013


Ответы (1)


Решение найдено. Мне пришлось изменить File.new на Rack::Test::UploadedFile.new

person pixelearth    schedule 30.01.2013