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
多分、もっといい方法があるはず。