2015-09-18 15 views
8

Sto cercando di ottenere un blocco before(:each) da eseguire per tutte le specifiche eccettotype: :feature.Rspec.config prima (: each) tranne per specifici: tipi

L'unico modo per farlo funzionare è tagliare e incollare e disporre di blocchi di configurazione separati per ciascun tipo. (:type => :model, :type => :service, etc.)

spec/rails_helper.rb

# To speed up tests, stub all Paperclip saving and reading to/from S3 
config.before(:each, :type => :model) do 
    allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true) 
end 

C'è un approccio più secco?

+0

Hai provato 'config.before (: ciascuno,: {! | V | v =: funzione} type => lambda)' – Yule

+1

@ Yule funziona! e mi piace molto questo approccio. Posta una risposta e la accetterò – madcow

+0

Grande! Solo un sospetto da altri documenti che ho letto. Risposta aggiunta Sono contento di poterti aiutare. – Yule

risposta

10

Quello che stai passando nel tuo blocco precedente, è un 'conditions hash'. RSpec applicherà solo il precedente a quegli esempi o contesti che corrispondono a tali condizioni.

L'hash è abbastanza flessibile e puoi fare cose semplici come type: :model come hai fatto, ma puoi interrogare qualsiasi tipo di metadata, con nomi arbitrari.

Come esempio da filter run excluding

:foo => 'bar' 
    :foo => /^ba/ 
    :foo => lambda {|v| v == 'bar'} 
    :foo => lambda {|v,m| m[:foo] == 'bar'} 

:foo potrebbe essere qualsiasi cosa, ad esempio, il tipo. Ma ti dà un sacco di flessibilità, specialmente con la sintassi lambda per essere in grado di specificare in quali circostanze vuoi eseguire le tue specifiche.

Nel tuo caso si potrebbe fare qualcosa di simile:

config.before(:each, :type => lambda {|v| v != :feature}) do 
    allow_any_instance_of(Paperclip::Attachment).to receive(:save).and_return(true) 
end 
2

È possibile utilizzare unless per giudicare i metadati di esempio tramite un hook around.

RSpec.configure do |config| 
    config.around(:each) do |example| 
    example.run unless example.metadata[:type].eql? :feature 
    end 
end 
Problemi correlati