2016-06-10 4 views
1

Я ищу общий способ настройки RSpec Capybara, чтобы что-то сделать после загрузки каждой страницы в тестовом примере.Конфигурация Capybara после загрузки каждой страницы

Пример:

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

Тогда я могу проверить, что массив в моем художественном тесте.

Только другая опция для «глобальной» конфигурации, о которой я могу думать, заключается в использовании if Rails.env.test? в представлении.

Есть ли лучший способ?

+0

Условное использование JS в представлении - единственное, что я мог придумать. * * содрогается * * – steel

+0

Ах, да. Вот что я в итоге сделал. Я думал, что может быть более чище, чем мне не хватает. –

ответ

1

Я думаю, вы могли бы заплатить #visit, чтобы всегда выполнять свой JS после каждого посещения - но похоже, что вы пытаетесь сделать то, что действительно не предназначено для Capybara, и, возможно, не имеет смысла делать это.

+0

Спасибо, Том. Я не всегда звоню в гости. Большую часть времени он просто перенаправляется с помощью кнопок на странице –

+0

@PetrGazarov. Тогда нет возможности сделать это с Capybara - он не знает об изменениях страницы, вызванных таким образом, если вы специально не проверяете наличие видимых изменений на странице , –

0

Я столкнулся с этим, пытаясь до monitor slow network requests. Хотя в конце концов это не было необходимо, работала успешно:

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