2012-12-21 9 views
13

ho ...Come rendere Rspec save_and_open_page automaticamente quando qualsiasi spec fallisce

/spec/spec_helper.rb:

require 'capybara/rspec' 
require 'capybara/rails' 
require 'capybara/dsl' 

RSpec.configure do |config| 
    config.fail_fast = true 
    config.use_instantiated_fixtures = false 
    config.include(Capybara, :type => :integration) 
end 

Così, non appena ogni spec fallisce, Rspec chiude e spettacoli tu l'errore.

Al punto, vorrei che anche Rspec richiamasse automaticamente il metodo save_and_open_page di Capybara. Come posso fare questo?

Capybara-Screenshot sembra promettente, ma mentre salva sia l'HTML che uno screenshot come file immagine (che non ho bisogno), non li apre automaticamente.

risposta

12

Nella configurazione di rspec è possibile definire un after-hook (https://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks) per ciascun esempio. Non è molto ben documentato, ma il blocco per questo hook potrebbe richiedere un parametro example. Sull'oggetto example si potrebbe verificare:

  • è una caratteristica specifica: example.metadata[:type] == :feature
  • ha fallito: example.exception.present?

Il codice completo snipped dovrebbe essere simile:

# RSpec 2 
    RSpec.configure do |config| 
    config.after do 
     if example.metadata[:type] == :feature and example.exception.present? 
     save_and_open_page 
     end 
    end 
    end 

    # RSpec 3 
    RSpec.configure do |config| 
    config.after do |example| 
     if example.metadata[:type] == :feature and example.exception.present? 
     save_and_open_page 
     end 
    end 
    end 
+0

funziona come un fascino ... grazie – rizidoro

+1

Rspec 3 richiede di mettere esplicitamente 'do | esempio |' perché funzioni – Eva

1

In RSpec 2 in combinazione con Rails 4, utilizzo questo blocco di configurazione:

# In spec/spec_helper.rb or spec/support/name_it_as_you_wish.rb 
# 
# Automatically save and open the page 
# whenever an expectation is not met in a features spec 
RSpec.configure do |config| 
    config.after(:each) do 
    if example.metadata[:type] == :feature and example.exception.present? 
     save_and_open_page 
    end 
    end 
end 
Problemi correlati