Подтвердить что ты не робот

Как сделать Rspec save_and_open_page автоматически, когда какой-либо spec не работает

У меня есть...

/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

Итак, как только какой-либо spec не сработает, Rspec завершает работу и показывает вам ошибку.

В этом случае я бы хотел, чтобы Rspec также автоматически вызывал метод Capybara save_and_open_page. Как я могу это сделать?

Capybara-Screenshot выглядит многообещающим, но в то время как он сохраняет как HTML, так и скриншот в виде файла изображения (который мне не нужен), он автоматически не открывает их.

4b9b3361

Ответ 1

В конфигурации rspec вы можете определить после крючка (https://www.relishapp.com/rspec/rspec-core/v/2-2/docs/hooks/before-and-after-hooks) для каждого примера. Это не очень хорошо документировано, но блок для этого крюка может принимать параметр example. На объекте example вы можете проверить:

  • это спецификация функции: example.metadata[:type] == :feature
  • не удалось: example.exception.present?

Полный код, отрезанный, должен выглядеть так:

  # 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

Ответ 2

В RSpec 2 вместе с Rails 4 я использую этот конфигурационный блок:

# 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