class Test::Unit::TestCase
Add the methods upload
, the setup_file_fixtures
and teardown_file_fixtures
to the class Test::Unit::TestCase
.
Public Instance Methods
Copies the fixture files from “RAILS_ROOT/test/fixtures/file_column” into the temporary storage directory used for testing (“RAILS_ROOT/test/tmp/file_column”). Call this method in your setup
methods to get the file fixtures (images, for example) into the directory used by file_column in testing.
Note that the files and directories in the “fixtures/file_column” directory must have the same structure as you would expect in your “/public” directory after uploading with FileColumn
.
For example, the directory structure could look like this:
test/fixtures/file_column/ `-- container |-- first_image | |-- 1 | | `-- image1.jpg | `-- tmp `-- second_image |-- 1 | `-- image2.jpg `-- tmp
Your fixture file for this one “container” class fixture could look like this:
first: id: 1 first_image: image1.jpg second_image: image1.jpg
A usage example:
def setup setup_fixture_files # ... end
# File lib/test_case.rb, line 72 def setup_fixture_files tmp_path = File.join(Rails.root.to_s, "test", "tmp", "file_column") file_fixtures = Dir.glob File.join(Rails.root.to_s, "test", "fixtures", "file_column", "*") FileUtils.mkdir_p tmp_path unless File.exists?(tmp_path) FileUtils.cp_r file_fixtures, tmp_path end
Removes the directory “/test/tmp/file_column/” so the files copied on test startup are removed. Call this in your unit test's teardown
method.
A usage example:
def teardown teardown_fixture_files # ... end
# File lib/test_case.rb, line 91 def teardown_fixture_files FileUtils.rm_rf File.join(Rails.root.to_s, "test", "tmp", "file_column") end
Returns a Tempfile
object as it would have been generated on file upload. Use this method to create the parameters when emulating form posts with file fields.
Example:¶ ↑
def test_file_column_post entry = { :title => 'foo', :file => upload('/tmp/foo.txt')} post :upload, :entry => entry # ... end
Parameters¶ ↑
-
path
The path to the file to upload. -
content_type
The MIME type of the file. If it is:guess
, the method will try to guess it.
# File lib/test_case.rb, line 24 def upload(path, content_type=:guess, type=:tempfile) if content_type == :guess case path when /\.jpg$/ then content_type = "image/jpeg" when /\.png$/ then content_type = "image/png" else content_type = nil end end uploaded_file(path, content_type, File.basename(path), type) end