Rails 3.1。 Capybara的Selenium驱动程序没有捕获路由错误

时间:2011-05-26 14:24:10

标签: ruby-on-rails cucumber capybara webdriver

当我在Cucumber的步骤定义中使用visit方法,然后通过Capybara的Selenium驱动程序运行它时,尽管没有实现控制器,它仍然通过。

以下是一个例子:

功能

# features/one.feature

Feature: One

  @selenium
  Scenario: One
    Given I visit the example page

步骤定义

# features/step_definitions/example_steps.rb

Given /^I visit the example page$/ do
  visit example_path
end

路线

# config/routes.rb

Example::Application.routes.draw do
  resource :example
end

控制器

未实施

结果

Feature: One

    @selenium
    Scenario: One
      Given I visit the example page

    1 scenario (1 passed)
    1 step (1 passed)
    0m18.162s

但是,当我使用RackTest驱动程序时,所有工作都按预期工作,除非实现控制器,否则路由异常会上升。

以下是相同的示例,但使用了RackTest:

功能

# features/one.feature

Feature: One

  @rack_test
  Scenario: One
    Given I visit the example page

结果

Feature: One

  @rack_test
  Scenario: One
    Given I visit the example page
      uninitialized constant ExamplesController (ActionController::RoutingError)
      ./features/step_definitions/example_steps.rb:2:in `/^I visit the example page$/'
      features/one.feature:5:in `Given I visit the example page'

Failing Scenarios:
cucumber features/one.feature:4 # Scenario: One

1 scenario (1 failed)
1 step (1 failed)

使用Selenium驱动程序时,如何强制Capybara引发路由错误?

感谢。

Ruby 1.9.2;

Ruby on Rails 3.1.0.rc1;

黄瓜0.10.3;

Cucumber-rails 0.5.0;

Capybara 1.0.0.beta1;

Selenium-webdriver 0.2.0。

1 个答案:

答案 0 :(得分:1)

Selenium驱动程序在收到类似500的“失败”http代码时不会失败。如果您将config / environments / test.rb保留为默认值,则应该有一行config.action_dispatch.show_exceptions = false。因此,您可以将其设置为true,或者您必须添加更多步骤以确保页面实际显示您所期望的内容。