Testowanie uploadu wielu plików na raz

Testując pewną funkcjonalność w projekcie napotkałem na ciekawy problem, objawający się tylko w testach.

Implementuję wysyłanie wiadomości email ze strony. Wiadomości te mogą mieć załączane pliki. Model, który obsługuje walidacje wiadomości jest klasą AR bez tabelki (tableless model). Załączniki chcę ładować do zmiennej attachments (tablicy). Problem pojawia się, kiedy chcę testować, czy załączniki mają akceptowalny content_type.

W skrócie kod modelu jest taki:

[code=Ruby]class Message < ActiveRecord::Base
VALID_CONTENT_TYPES = [‘image/jpg’] # jakis array poprawnych typow
def self.columns() @columns ||= []; end
def self.column(name, sql_type = nil, default = nil, null = true)
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
end

column :email, :string # i podobnie dla innych kolumn

validate :attachments_content_type

def attachments
@attachments ||= []
end

def attachments=(attachments)
@attachments = attachments
end

private
def attachments_content_type
errors.add(:attachments, “mają niepoprawny format”) if !attachments.blank? && !attachments.all?{|a| VALID_CONTENT_TYPES.include? a.content_type}
end
end[/code]
Formularz wysyłania wiadomości jest oczywiście z :multipart => true, wysyłanie przez przeglądarkę działa jak należy. Sam fragment formularza wygląda tak:

<%= file_field_tag 'message[attachments][]' %>

Problem w tym, że w testach (Cucumber + Webrat) załączenie pliku nie działa tak, jak powinno - w tablicy @message.attachments po utworzeniu obiektu z parametrów wysłanych w formularzu nie mam obiektów File (lub podobnej klasy), ale stringi typu “<File:/tmp/…>” (tak, jakby ktoś/coś wywołało array.map(&:to_s) na uploadowanych plikach).

Doszedłem do tego, że sytuacja psuje się tylko przy podpinaniu pliku do pola-tablicy (czyt. takiego, którego name kończy się parą nawiasów ‘[]’).

Czy spotkał się ktoś z Was z takim problemem i wie, jak go rozwiązać nie zmieniając podejścia do problemu?