你如何使用Minitest,水豚,硒进行javascript测试?

问题描述:

有很多关于如何与水豚执行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

嗯,我注意到在文档几行,似乎说的是,以上只能在Rspec的完成

但是,如果你正在使用RSpec的或黄瓜,你可能反而要考虑离开更快的:rack_test作为default_driver,并且仅标记那些需要支持JavaScript的驱动程序using :js => true@javascript的测试。

+2

你不能指定: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 
+0

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

+0

您需要使用minitest元数据为此 – sambehera 2013-01-23 02:30:54

什么: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个步骤:

  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