我想在某些测试中切换到webkit_billy
(Puffing 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
答案 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