Estoy tratando de escribir una prueba para un modelo con una imagen, usando clip. Estoy usando el marco de prueba predeterminado, sin shoulda o rspec. En este contexto, ¿cómo debería probarlo? ¿Debo realmente subir un archivo? ¿Cómo debo agregar un archivo al accesorio?prueba de unidad en rieles - modelo con clip
Respuesta
Agregar archivo a un modelo es muy simple. Por ejemplo:
@post = Post.new
@post.attachment = File.new("test/fixtures/sample_file.png")
# Replace attachment= with the name of your paperclip attachment
En ese caso se debe poner el archivo en su test/fixtures
dir.
por lo general hacen un poco de ayuda en mi test_helper.rb
def sample_file(filename = "sample_file.png")
File.new("test/fixtures/#{filename}")
end
Entonces
@post.attachment = sample_file("filename.txt")
Si utiliza algo así como Factory Girl en lugar de accesorios Esto se hace aún más fácil.
Esto está en Rspec, pero se puede cambiar fácilmente sobre
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
Desde Paperclip está bastante bien probado, por lo general no se centran demasiado en el acto de "subir", a menos que estoy haciendo algo fuera de lo común. Pero intentaré centrarme más en garantizar que las configuraciones del archivo adjunto, en relación con el modelo al que pertenece, satisfagan mis necesidades.
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
Todos los objetos valiosos se pueden encontrar en Model.attachment_definitions
.
Uso FactoryGirl, configuro el modelo.
#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
continuación
# in spec
before(:each) { @user = FactoryGirl.create(:user, :with_photo) }
En el archivo adjunto clip especifique dónde va a ser salvado es decir
...
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
...
luego probar tanto los attachment_definitions (como lo sugiere kwon) y se guarda el Dir.glob para verificar el archivo
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
de esta manera Estoy seguro que es llevar a cabo la correcta directy/ruta crear etc
- 1. ¿Forma fácil de hacer ajax cargando con clip en rieles?
- 2. ejecución de unidad de rieles individuales/prueba funcional
- 3. Eliminar prueba :: unidad
- 4. imagen predeterminada del clip de rieles con S3
- 5. rieles + clip de papel: ¿Es una buena idea un modelo genérico de "archivo adjunto"?
- 6. Prueba de unidad CacheManager
- 7. Unidad de prueba de Android con Maven
- 8. (Unidad) Prueba de ArrayAdapter
- 9. Rieles con clip paperx content_type vuelve como aplicación/zip
- 10. Prueba de unidad con una biblioteca estática
- 11. MSTest - prueba de unidad con StackOverflowException
- 12. Prueba de unidad ASP.NET WebApi con Request.CreateResponse
- 13. Prueba de unidad IList con CollectionAssert
- 14. Forma anidada con clip
- 15. Unidad de prueba EJB
- 16. Versiones de modelo de rieles con aprobación
- 17. Cargando una imagen de Android (con Android Asynchronous Http Client) al servidor de rieles (con clip)
- 18. unidad que prueba una unidad de trabajo
- 19. Modelo de rieles "before_filter"?
- 20. Prueba de Unidad de Curado
- 21. Sockets de prueba de unidad
- 22. Herencia de prueba de unidad
- 23. Prueba de unidad post mortem
- 24. unidad prueba olor
- 25. rieles de prueba funcional
- 26. ASP.NET - Unidad MembershipProvider prueba
- 27. Prueba de unidad código matemático
- 28. Prueba de unidad Clases estáticas
- 29. Unidad Prueba Assert.AreEqual failed
- 30. Ejemplos de prueba de unidad?
Da: NoMethodError: indefinido método 'adjunto =' – CanCeylan
@CanCeylan' attachment' es genérico, como 'foo' ; debe reemplazarlo con el nombre que utilizó cuando agregó un archivo adjunto Paperclip en su modelo. –
@RicoJones gracias, se ha agregado una aclaración en la publicación. –