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