2012-08-08 121 views
3

这个问题的几个变种已经被问到了,而且我肯定从这个主题的阅读中学到了东西,但是大多数答案似乎并不直接适用于这种情况,或者涉及使用Rspec或黄瓜的解决方案。使用Capybara和Minitest来测试JavaScript

我目前正在使用Minitest和水豚的测试套件。如果可能的话,我不想引入太多的其他宝石,但如果它们是轻量级的,我会接受它,因为测试已经需要一段时间才能运行。

Rspec有:js => true和黄瓜有@javascript,但minitest似乎没有这样的东西。然后,自然的解决方案将是切换驱动程序,并执行:Capybara.current_driver = :selenium,但是当我这样做时,它不起作用,并且我得到2个错误(每个启用js的测试都有一个错误)。

我的问题是这样的:为什么我会收到这些错误,以及如何进行一些基本的JavaScript测试工作?这里的都是错误的:

Component returned failure code: 0x804b0012 (NS_ERROR_UNKNOWN_PROTOCOL) [nsIWebNavigation.loadURI] 
    Exception `Selenium::WebDriver::Error::UnknownError' at: 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/response.rb:15:in `initialize' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:59:in `new' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:59:in `create_response' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:65:in `request' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in `call' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in `raw_execute' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in `execute' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:99:in `get' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/navigation.rb:14:in `to' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:36:in `visit' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/session.rb:157:in `visit' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in `visit' 
    test/integration/resource_access_test.rb:22:in `block (2 levels) in <top (required)>' 

而这里的其他错误:

undefined method `[]' for nil:NilClass 
    Exception `NoMethodError' at: 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/rack-test-0.6.1/lib/rack/test.rb:171:in `env_for' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/rack-test-0.6.1/lib/rack/test.rb:56:in `get' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/browser.rb:62:in `process' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/browser.rb:21:in `visit' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/rack_test/driver.rb:32:in `visit' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/session.rb:157:in `visit' 
    /Users/epithelialbiology/.rvm/gems/ruby-1.9.2-p320/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in `visit' 
    test/integration/resource_access_test.rb:40:in `block (2 levels) in <top (required)>' 

有谁知道什么可以怎么回事,以及如何解决这个问题?

回答

2

尝试下面的语法来切换水豚司机:

Capybara.current_driver = Capybara.javascript_driver 
+0

这不会叉勺工作。水豚打开Firefox页面,但它是空白的。它超时:无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)。这整个minitest堆栈还没有准备好黄金时段。配置3天后,这是一个接一个的问题。我已经完成了其他错误,但是Spork内部的JavaScript测试,那是不可能的。 – AKWF 2013-05-02 19:34:52

相关问题