我正在尝试使用回形针为带有图片的模型编写测试。我正在使用默认的测试框架,没有 shoulda 或 rspec。在这种情况下,我应该如何测试它?我真的应该上传文件吗?我应该如何将文件添加到夹具?
问问题
14185 次
3 回答
68
将文件添加到模型非常简单。例如:
@post = Post.new
@post.attachment = File.new("test/fixtures/sample_file.png")
# Replace attachment= with the name of your paperclip attachment
在这种情况下,您应该将文件放入您的test/fixtures
目录中。
我通常在我的 test_helper.rb 中做一个小帮手
def sample_file(filename = "sample_file.png")
File.new("test/fixtures/#{filename}")
end
然后
@post.attachment = sample_file("filename.txt")
如果您使用诸如Factory Girl之类的东西而不是固定装置,这将变得更加容易。
于 2009-12-13T08:51:41.347 回答
16
这是在 Rspec 中,但可以轻松切换
before do # setup
@file = File.new(File.join(RAILS_ROOT, "/spec/fixtures/paperclip", "photo.jpg"), 'rb')
@model = Model.create!(@valid_attributes.merge(:photo => @file))
end
it "should receive photo_file_name from :photo" do # def .... || should ....
@model.photo_file_name.should == "photo.jpg"
# assert_equal "photo.jpg", @model.photo_file_name
end
由于回形针经过了很好的测试,我通常不会过多地关注“上传”的行为,除非我正在做一些与众不同的事情。但我将尝试更多地关注确保附件的配置(与其所属的模型相关)满足我的需求。
it "should have an attachment :path of :rails_root/path/:basename.:extension" do
Model.attachment_definitions[:photo][:path].should == ":rails_root/path/:basename.:extension"
# assert_equal ":rails_root/path/:basename.:extension", Model.attachment_definitions[:photo][:path]
end
所有的好东西都可以在 中找到Model.attachment_definitions
。
于 2009-12-13T09:10:24.780 回答
1
我使用 FactoryGirl,设置模型。
#photos.rb
FactoryGirl.define do
factory :photo do
image File.new(File.join(Rails.root, 'spec', 'fixtures', 'files', 'testimg1.jpg'))
description "testimg1 description"
end # factory :photo
end
然后
# in spec
before(:each) { @user = FactoryGirl.create(:user, :with_photo) }
在回形针附件中指定它的保存位置,即
...
the_path= "/:user_id/:basename.:extension"
if Rails.env.test?
the_path= ":rails_root/tmp/" + the_path
end
has_attached_file :image, :default_url => ActionController::Base.helpers.asset_path('missing.png'),
:path => the_path, :url => ':s3_domain_url'
Paperclip.interpolates :user_id do |attachment, style|
attachment.instance.user_id.to_s
end
...
然后测试 attachment_definitions(如 kwon 所建议)和 Dir.glob 以检查文件是否已保存
it "saves in path of user.id/filename" do
expect(Dir.glob(File.join(Rails.root, 'tmp', @user.id.to_s, @user.photo.image.instance.image_file_name)).empty?).to be(false)
end
这样我确定它执行正确的直接/路径创建等
于 2016-07-06T01:02:58.387 回答