13

我有...

/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

因此,一旦任何规范失败,Rspec 就会退出并显示错误。

在这一点上,我希望 Rspec 也自动调用 Capybara 的save_and_open_page方法。我怎样才能做到这一点?

Capybara-Screenshot看起来很有希望,但是虽然它将 HTML 和屏幕截图保存为图像文件(我不需要),但它不会自动打开它们。

4

2 回答 2

13

在 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
于 2013-06-05T09:06:35.640 回答
1

在 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
于 2014-06-24T21:20:58.533 回答