2016-06-19 29 views
1

我想切換到webkit_billyPuffing Billy gem的Javascript驅動程序)僅在某些測試中。我想要能夠使用:Rails/RSpec:如何通過使用RSpec元數據僅在特定測試中觸發膨化比利

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

僅當使用js: true元數據時,纔會使用Capybara.javascript_driver(使用正常配置)編輯測試,因此不需要將javascript_driver的值重置爲:webkit_billy,因爲所有這些操作都會影響到js元數據的任何進一步測試。你可以看到默認的行爲實現(當你需要水豚/ 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 

你需要「水豚/ rspec的」後的地方,但定義你的數據庫清理配置之前。然後將Capybara.default_driver設置爲在沒有指定元數據時使用的任何驅動程序,並將Capybara.javascript_driver設置爲指定js元數據時要使用的任何驅動程序。因此 - 如果您想始終使用:webkit驅動程序(除指定比利以外)設置​​,並且您永遠不需要指定js: true,但可以通過將driver: :rack_test元數據添加到特定測試來始終使特定測試使用rack_test。

注意:這裏假設您使用的是推薦的database_cleaner config - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example - 它根據所使用的實際驅動程序更改數據庫策略,而不僅僅基於js元數據的存在。

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