在铁轨unit testing – 与回形针模型

我试图用一个回形针写一个模型的testing,使用回形针。 我正在使用testing框架的默认值,没有shoulda或rspec。 在这种情况下,我该如何testing呢? 我真的应该上传一个文件吗? 我应该如何添加一个文件夹具?

将文件添加到模型非常简单。 例如:

@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而不是固定装置,这变得更加容易。

这是在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 

由于回形针经过了很好的testing,我通常不会太在意“上传”的行为,除非我在做一些不寻常的事情。 但是我会尝试着重于确保附件的configuration与其所属的型号相符,以满足我的需求。

 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_definitionsfind。

我使用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 

然后testingattachment_definitions(由kwonbuild议)和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 

这样我确定它执行正确的直接/path创build等