我試圖用回形針爲帶圖片的模型編寫一個測試。我正在使用測試框架的默認,沒有shoulda或rspec。在這種情況下,我應該如何測試它?我應該真的上傳一個文件嗎?我應該如何將文件添加到燈具?在軌道單元測試 - 帶回形針的模型
33
A
回答
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,而不是燈具這就變得更容易。
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
找到。
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
這樣,我敢肯定它的執行正確的directy /路徑創建等
相關問題
- 1. 用軌道上的紅寶石回形針模型播種
- 2. 軌道3單元測試不運行
- 3. 環回模型的單元測試
- 4. 回形針::錯誤::在軌道4,5
- 5. 使用附件的功能的軌道單元測試
- 6. 軌道上的回形針紅寶石
- 7. Rails:如何知道單元測試中哪個測試模型?
- 8. 軌道從回形針遷移到carrierwave_direct
- 9. 無法安裝回形針軌道3.0.7
- 10. 軌道 - 回形針文件名
- 11. Django模型單元測試
- 12. Codeigniter單元測試模型
- 13. django模型單元測試
- 14. 軌,SRP,和單元測試
- 15. 回形針測試失敗
- 16. 軌+回形針+ plupload
- 17. 帶回形針的每個模型的多個附件
- 18. Rails 3 - 回形針帶回形針
- 19. 軌道模型
- 20. 回形針和功能測試問題(導軌)
- 21. Phalcon - 模擬單元測試模型
- 22. 軌單元測試錯誤:「測試是不是一個模塊」
- 23. 簡單的SSH測試軌道
- 24. 多個模型的多個圖像 - 回形針,導軌
- 25. Mongomapper - 單元測試與軌道上的應該2.3.5
- 26. IEnumerable返回類型的單元測試
- 27. 嵌套模型形式軌道3
- 28. 測試記錄軌道3.1
- 29. Rspec的軌道單元測試 - Ruby on Rails的
- 30. 帶相冊的回形針
它提供:NoMethodError: 未定義的方法'附件=」 – CanCeylan 2012-12-25 12:51:58
@CanCeylan'attachment'是通用的,比如'foo' ;您應該將其替換爲您在模型上添加回形針附件時使用的任何名稱。 – 2013-02-01 19:34:15
@RicoJones謝謝,在帖子中補充說明。 – 2013-02-01 23:01:46