Rails / RSpec:如何通过使用RSpec元数据仅在特定测试上触发Puffing Billy

时间:2016-06-19 10:43:54

标签: ruby-on-rails ruby-on-rails-4 rspec capybara

我想在某些测试中切换到webkit_billyPuffing Billy gem的Javascript驱动程序) 。我希望能够使用:

describe "xxx", billy: true do
end

这应该向RSpec发出信号,我想切换到膨胀的比利司机。

我在spec_helper.rb写了这个,但它没有用:

  config.before(:each) do |example|
    if [:billy].include? example.metadata[:type]
      Capybara.current_driver     = :webkit_billy
      Capybara.javascript_driver  = :webkit_billy
    else
      Capybara.current_driver     = :webkit
      Capybara.javascript_driver  = :webkit 
    end
  end

2 个答案:

答案 0 :(得分:2)

仅在将js: true元数据添加到测试时使用Capybara.javascript_driver(具有正常配置),因此无需将javascript_driver的值重置为:webkit_billy,因为所有这样做都会影响任何进一步的使用js元数据进行测试。您可以看到默认行为实现(当您需要capybara / rspec时)here 这样做最初将测试的驱动程序设置为Capybara.default_driver,然后如果存在js元数据,则将驱动程序设置为Capybara.javascript_driver的值,然后如果存在driver元数据它把它设置为 - 即。 driver元数据优先于'js',如果没有,你只需要获得default_driver。这意味着没有任何额外的添加,您可以在测试中指定driver: :webkit_billy并获取:webkit_billy用于该测试。

添加您想要指定billy: true所需的行为

RSpec.configure do |config|
  config.before(:each, billy: true) do
    Capybara.current_driver     = :webkit_billy
  end
end

在您需要'capybara / rspec'之后但在定义数据库清理程序配置之前的某个地方。然后将Capybara.default_driver设置为在未指定元数据时要使用的任何驱动程序,并将Capybara.javascript_driver设置为指定js元数据时要使用的任何驱动程序。所以 - 如果你想总是使用:webkit驱动程序(除了指定billy之外)设置Capybara.default_driver = :webkit并且你永远不需要指定js: true,但是总是可以通过添加{{来使特定测试使用rack_test 1}}元数据到特定的测试。

注意:这假设您正在使用推荐的database_cleaner config - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example - 它根据所使用的实际驱动程序更改数据库策略,而不仅仅基于driver: :rack_test元数据的存在。

答案 1 :(得分:0)

你怎么试试这个:

config.before(:each, billy: true) do |example|
      Capybara.current_driver     = :webkit_billy
      Capybara.javascript_driver  = :webkit_billy
end

或者按照目前的做法,你可以这样做:

config.before(:each) do |example|
    if example.metadata[:billy] # this should either be true or nil
      Capybara.current_driver     = :webkit_billy
      Capybara.javascript_driver  = :webkit_billy
    else
      Capybara.current_driver     = :webkit
      Capybara.javascript_driver  = :webkit 
    end
  end