Vraag Paperclip 4, Amazon S3 & rspec: hoe stub bestand uploaden?


Ik schrijf tests met rspec en ben een beetje aan het worstelen met Paperclip 4. Op dit moment gebruik ik webmock om verzoeken te stomp maar beeldverwerking vertraagt ​​testen.

Alles wat ik lees suggereert om stubs als volgt te gebruiken:

Profile.any_instance.stub(:save_attached_files).and_return(true)

Het werkt niet omdat: save_attached_files voor zover ik weet met Paperclip 4 verdwenen zijn.

Wat is de juiste manier om het nu te doen?

Bedankt


10
2018-02-18 10:12


oorsprong


antwoorden:


Voeg dit toe aan uw rails_helper.rb in uw configuratieblok:

RSpec.configure do |config|
  # Stub saving of files to S3
  config.before(:each) do
    allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true)
  end
end

13
2017-09-10 22:01



Het geeft niet precies antwoord op mijn vraag, maar ik vond een manier om snellere specificaties te gebruiken dankzij deze dev blog, dus ik plaats het als het iemand anders kan helpen.

Voeg dit stuk code toe aan het begin van uw spec-bestand of in een helper. Mijn tests worden nu 3x sneller uitgevoerd.

# We stub some Paperclip methods - so it won't call shell slow commands
# This allows us to speedup paperclip tests 3-5x times.
module Paperclip
  def self.run cmd, params = "", expected_outcodes = 0
    cmd == 'convert' ? nil : super
  end
end
class Paperclip::Attachment
  def post_process
  end
end

Paperclip> 3.5.2

Gebruik voor nieuwe versies van Paperclip het volgende:

module Paperclip
  def self.run cmd, arguments = "", interpolation_values = {}, local_options = {}
    cmd == 'convert' ? nil : super
  end
end

class Paperclip::Attachment
  def post_process
  end
end

3
2018-02-19 14:44



Ik had een heckuva-tijd om hiermee om te gaan. Ik wilde Paperclip niet per se testen - in plaats daarvan moest ik een bestand op mijn model hebben staan, zodat ik een heel gevoelige eigen klas kon testen.

Geen van de andere antwoorden werkte voor mij (Rails 5, Rspec 3.5), dus gaf ik op met AWS stoten of met de Paperclip :: Shoulda :: Matchers. Niets werkte en het at een hele dag op! Eindelijk gaf ik de hele tijd Paperclip op en ging deze route:

list = build(:list)
allow(list).to receive_message_chain("file.url") { "#{Rails.root}/spec/fixtures/guess_fullname.csv" }
importer = Importer.new(list)
expect(importer.set_key_mapping).to eq({nil=>:email_address, :company=>:company, :fullname=>:full_name})

Waar mijn models/list.rb heeft has_attached_file :file en Importeur is een klasse die ik heb geschreven en die het bestand neemt, dat al door paperclip naar S3 is geüpload voordat de klasse wordt geïnitialiseerd en het bestand verwerkt. De file.url anders de S3-URL zou zijn, dus ik geef hem het pad in mijn repo aan een csv-testbestand. set_key_mapping is een methode in mijn klas die ik kan gebruiken om het verwerkte deel te verifiëren.

Ik hoop dat dit iemand een paar uur redt ...


1
2018-06-27 02:27



Hoe zit het met toevoegen? AWS.stub! in uw spec/spec_helper.rb? Probeer het eens.


0
2018-05-28 23:52