你如何使用Minitest,水豚,硒进行javascript测试?
有很多关于如何与水豚执行JavaScript的测试实例/硒/ Rspec的在其中你可以写一个测试,像这样:你如何使用Minitest,水豚,硒进行javascript测试?
it "does something", :js => true do
...
end
然而,随着MINITEST你不能传递指示硒进行测试的第二个参数。
有没有人有任何想法如何做到这一点?
嗯,我注意到在文档几行,似乎说的是,以上只能在Rspec的完成
但是,如果你正在使用RSpec的或黄瓜,你可能反而要考虑离开更快的:rack_test
作为default_driver
,并且仅标记那些需要支持JavaScript的驱动程序using :js => true
或@javascript
的测试。
你不能指定:js =>真正的'''它“应该这样做”做'''级别最小。只在主要的'''describe'''块中。 – AKWF 2013-05-02 19:39:29
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
什么: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
只是更新一些信息,还有一个更强大的硒的webdriver与Ruby Bindings现在。
从终端快速地与轨道4和硒的webdriver测试JavaScript在Firefox上,你需要做以下4个步骤:
-
添加宝石到您的Gemfile
宝石“硒的webdriver “ 宝石 'MINITEST护栏'
-
安装宝石
捆绑安装
-
生成测试用例(参考文献:Official Guide)
斌/导轨产生integration_test your_case_name
开始在你的测试用例编写测试代码。 其实你可以用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
也欣赏那些让我可以做出更好答案的评论。
这可能会在理论上回答这个问题,但最好将未来用户的答案的基本部分包括在内,并提供链接以供参考。 [link-dominated answers](// meta.stackexchange.com/questions/8231)可能通过[link rot](// en.wikipedia.org/wiki/Link_rot)失效。 – Mogsdad 2015-08-28 17:40:49
只需链接到自己的图书馆不是一个好的答案。链接到它,解释为什么它解决了这个问题,使用库提供代码来做到这一点,并放弃更好的答案。请参阅:[**什么意思是“良好”自我推广?**](http://meta.stackexchange.com/q/182212/200235) – durron597 2015-08-28 17:49:22
如何在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