2016-06-10 10 views
1

Ich bin auf der Suche nach einer allgemeinen Möglichkeit, RSpec Capybara zu konfigurieren, etwas nach jeder Seite laden innerhalb Testbeispiel zu tun.Capybara Konfiguration nach jeder Seite laden

Beispiel:

config.after_page_load do 
    execute_script('window.analyticsEvents = []; window.analytics = function(name, properties) { analyticsEvents.push([name, properties]) }') 
end 

Dann kann ich das Array in meinem Feature-Test überprüfen.

Nur andere Option für eine "globale" Konfiguration, die ich mir vorstellen kann, ist die Verwendung if Rails.env.test? in der Ansicht.

Gibt es einen besseren Weg?

+0

Bedingt laufende JS in der Ansicht ist das einzige, was ich denken konnte. * * schaudert * * – steel

+0

Ah, ja. Das habe ich getan. Ich dachte, es könnte einen Hacker-Weg geben, den ich vermisse. –

Antwort

1

Ich denke, Sie könnten Patch #visit, um immer Ihre JS nach jedem Besuch Anruf auszuführen - aber es scheint, wie Sie vielleicht versuchen, etwas zu tun, dass Capybara wirklich nicht gemeint ist, und macht keinen Sinn zu tun.

+0

Danke, Tom. Ich rufe nicht immer Besuch an. Die meiste Zeit ist es nur Weiterleitung über Klick-Schaltflächen auf der Seite –

+0

@PetrGazarov Dann gibt es keine Möglichkeit, es von Capybara zu tun - es weiß nichts über Seitenänderungen auf diese Weise ausgelöst, es sei denn, Sie suchen gezielt nach sichtbaren Änderungen auf der Seite . –

0

Ich stieß dabei auf monitor slow network requests. Obwohl es am Ende nicht benötigt wurde, funktionierte das Folgende erfolgreich:

module CapybaraHooks 
    def after_page_change 

    end 

    Capybara::Session::DSL_METHODS.each do |method| 
    define_method method do |*args, &block| 
     old_page = page.current_url 
     super(*args, &block) 
     new_page = page.current_url 

     puts "Command #{method}" 
     if old_page != new_page 
     puts "Changed from #{old_page} to #{new_page}" 
     after_page_change 
     else 
     puts "Still on page: #{new_page}" 
     end 
    end 
    end 
end 

RSpec.configure do |config| 
    config.include CapybaraHooks, type: :feature 
end