2011-04-13 47 views
7

有很多關於如何與水豚執行JavaScript的測試實例/硒/ Rspec的在其中你可以寫一個測試,像這樣:你如何使用Minitest,水豚,硒進行javascript測試?

it "does something", :js => true do 
    ... 
end 

然而,隨着MINITEST你不能傳遞指示硒進行測試的第二個參數。

有沒有人有任何想法如何做到這一點?

+0

如何在Test :: Unit上使用Js [現已覆蓋文檔](https://github.com/jnicklas/capybara/blob/4161bbc560631e61e611d59bf797eeb59a6b1021/README.md#using-capybara-with-testunit)。說使用詳細的'Capybara.current_driver ='就像當前的答案。 – 2014-11-09 20:24:48

回答

0

嗯,我注意到在文檔幾行,似乎說的是,以上只能在Rspec的完成

但是,如果你正在使用RSpec的或黃瓜,你可能反而要考慮離開更快的:rack_test作爲default_driver,並且僅標記那些需要支持JavaScript的驅動程序using :js => true@javascript的測試。

+2

你不能指定:js =>真正的'''它「應該這樣做」做'''級別最小。只在主要的'''describe'''塊中。 – AKWF 2013-05-02 19:39:29

-1

https://github.com/wojtekmach/minitest-metadata似乎已經爲此提供了一個解決方案。

你可以做到以下幾點:

describe "something under test" do 
    it "does not use selenium for this test" do 
    visit "/" 
    assert body.has_content?("Hello world") 
    end 

    it "does use selenium for this test", :js => true do 
    visit "/" 
    click_link "Hide" # a link that uses a javascript click event, for example 
    assert body.has_no_link?("Hide") 
    end 
end 
+0

minitest-capybara實際上不提供此功能 – sambehera 2013-01-23 02:29:35

+0

您需要使用minitest元數據爲此 – sambehera 2013-01-23 02:30:54

17

什麼:js標誌正在做的是非常簡單的。它將當前驅動程序從默認(機架測試)切換到另一個支持javascript執行的驅動程序(selenium,webkit)。你可以做同樣的事情在MINITEST:

require "minitest/autorun" 

class WebsiteTest < MiniTest::Unit::TestCase 
    def teardown 
    super 
    Capybara.use_default_driver 
    end 

    def test_with_javascript 
    Capybara.current_driver = :selenium 
    visit "/" 
    click_link "Hide" 
    assert has_no_link?("Hide") 
    end 

    def test_without_javascript 
    visit "/" 
    click_link "Hide" 
    assert has_link?("Hide") 
    end 
end 

當然你也可以抽象成方便的模塊是:

require "minitest/autorun" 

module PossibleJSDriver 
    def require_js 
    Capybara.current_driver = :selenium 
    end 

    def teardown 
    super 
    Capybara.use_default_driver 
    end 
end 

class MiniTest::Unit::TestCase 
    include PossibleJSDriver 
end 

class WebsiteTest < MiniTest::Unit::TestCase 
    def test_with_javascript 
    require_js 
    visit "/" 
    click_link "Hide" 
    assert has_no_link?("Hide") 
    end 

    def test_without_javascript 
    visit "/" 
    click_link "Hide" 
    assert has_link?("Hide") 
    end 
end 
0

只是更新一些信息,還有一個更強大的硒的webdriver與Ruby Bindings現在。

從終端快速地與軌道4和硒的webdriver測試JavaScript在Firefox上,你需要做以下4個步驟:

  1. 添加寶石到您的Gemfile

    寶石「硒的webdriver 「 寶石 'MINITEST護欄'

  2. 安裝寶石

    捆綁安裝

  3. 生成測試用例(參考文獻:Official Guide

    斌/導軌產生integration_test your_case_name

  4. 開始在你的測試用例編寫測試代碼。 其實你可以用Ruby寫沒有水豚,撰寫案例與水豚你可以參考Capybara at Github

MINITEST樣本:

# create a driver 
driver = Selenium::WebDriver.for :firefox 
# navigate to a page 
driver.navigate.to 'url_to_page' 
# get element with class box 
box = driver.find_element(:css, '.box') 

# check width 
# get width by execute JavaScript 
assert_equal 100, driver.execute_script('return $(arguments[0]).width()', box) 

目前似乎缺乏與資源方面如何工作的與selenium webdriver,CI服務器(Jenkins)和Rails minitest順利,我創建了一個簡單的項目,並希望它可以幫助任何人快速輕鬆地入門: Rails Selenium Working Case

也欣賞那些讓我可以做出更好答案的評論。

+0

這可能會在理論上回答這個問題,但最好將未來用戶的答案的基本部分包括在內,並提供鏈接以供參考。 [link-dominated answers](// meta.stackexchange.com/questions/8231)可能通過[link rot](// en.wikipedia.org/wiki/Link_rot)失效。 – Mogsdad 2015-08-28 17:40:49

+0

只需鏈接到自己的圖書館不是一個好的答案。鏈接到它,解釋爲什麼它解決了這個問題,使用庫提供代碼來做到這一點,並放棄更好的答案。請參閱:[**什麼意思是「良好」自我推廣?**](http://meta.stackexchange.com/q/182212/200235) – durron597 2015-08-28 17:49:22