Как сделать 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, так и скриншот в виде файла изображения (который мне не нужен), он автоматически не открывает их.
Ответы
Ответ 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