Rails 3 + RSpec 2: ファイルアップロードのテスト

備忘録。

Rails 3.0.beta4 + RSpec 2.0.0.beta.11

モデルの spec でファイルアップロードのテストを試みる。fixture_file_upload メソッドが使えないので、次のようなメソッドを spec/spec_helper.rb に追加。


def mock_uploader(file, type = 'image/png')
uploader = StringIO.new
uploader.extend(ActionDispatch::Http::UploadedFile)
uploader.original_path = File.dirname(__FILE__) + '/fixtures/' + file
uploader.content_type = type
def uploader.read
File.read(original_path)
end
def uploader.size
File.stat(original_path).size
end
uploader
end

こんな風に使う。


require 'spec_helper'

describe Question do
before do
@valid_attributes = {
# 省略
}
end

describe '#image_attributes=' do
it 'アップロードされた画像を保存' do
q = Question.new(
@valid_attributes.merge(
:image_attributes => {
:uploaded_file => mock_uploader(
'images/rails.png', 'image/png')
}
)
)
q.should be_valid
q.save!

q.reload
q.image.should_not be_nil
end
end
end

多分、もっといい方法があるはず。