2011-11-30 199 views
13

我正在使用黄瓜和水豚。在一个rails 3.0.9平台上。我得到这个测试用例失败: 日志:黄瓜和水豚,如何打开外部网址或访问外部网址

(::) failed steps (::) 

No route matches "/wiki/Baltimore_Ravens" (ActionController::RoutingError) 
<internal:prelude>:10:in `synchronize' 
./features/step_definitions/web_steps.rb:20:in `/^(?:|I)am on (.+)$/' 
features/annotate.feature:7:in `Given I am on a web page' 

Failing Scenarios: 
cucumber features/annotate.feature:11 # Scenario: launch annotation/ logged in 

6 scenarios (1 failed, 5 skipped) 
63 steps (1 failed, 62 skipped) 

文件web_steps:拿到这段代码:

19 Given /^(?:|I)am on (.+)$/ do |page_name| 
20 visit path_to(page_name) 
21 end 

文件annotate.feature得到这个代码:

7 Given I am on a web page 

support/paths.rb中定义的“网页”为:

when /a web page/ 
    'http://en.wikipedia.org/wiki/Baltimore_Ravens' 

显然这是一个外部网址。我想打开它,水豚和黄瓜不会让我这样做。所以,帮助我找到一种在黄瓜测试用例中打开外部URL的方法!

+0

为什么你需要在外部页面上测试你的应用程序? –

+0

我们的应用程序的功能,用户可以在他浏览其他外部页面时启动它! –

+0

巴尔的摩乌鸦队! – jphager2

回答

19

水豚使用RackTest作为默认驱动程序,并且此驱动程序不允许访问外部URL(即测试远程应用程序)。

如果您要访问外部URL(测试,例如,你的应用程序正确重定向),你有两种基本选择:

1 /使用另一个驱动例如像硒:

before do 
    Capybara.current_driver = :selenium 
end 

然后,在代码中,你可以调用的URL像这样:

visit 'http://en.wikipedia.org/wiki/Baltimore_Ravens' 

或者,如果设置默认app_host像这样:

Capybara.app_host = 'http://en.wikipedia.org' 
Capybara.run_server = false # don't start Rack 

然后就可以调用的网址:

visit '/wiki/Baltimore_Ravens' 

您可以配置驱动程序和应用主机在spec_helper.rb在所有您规格全局启用它们:

Capybara.configure do |config| 
    config.current_driver = :selenium 
    config.run_server = false 
    config.app_host = 'http://en.wikipedia.org' 
end 

2 /使用capybara-mechanize

+0

我只是将硒的宝石添加到我的gem文件中,并且已解决!非常感谢 –