我正在尝试使用BDD在我的Rails 3站点中实现一项功能:
Feature: Patents Administration
Scenario: Patents index
Given I am on the admin patents page
Then I should see "Patents"
And the title should be "Wavetronix - Patents"
以下是相应的步骤:
Given /^I am on the (.*?) page$/ do |text|
visit eval("#{text.downcase.gsub(/\s/, '_')}_path(locale: 'en')")
end
Then /^I should see "(.*?)"$/ do |text|
page.must_have_selector('h1', text: text)
end
Then /^the title should be "(.*?)"$/ do |text|
page.must_have_selector('title', text: text)
end
第一步失败了:我需要实现Admin :: PatentsController:
module Admin
class PatentsController < BaseController
before_filter :find_patent
def index
end
private
def find_patent
@patent = Patent.find(params[:id]) if params[:id]
end
end
end
因为它继承自Admin :: BaseController,它有自己的索引操作和视图:
module Admin
class BaseController < ApplicationController
filter_access_to :index
def index
end
end
end
Admin :: PatentsController也继承了该操作和视图。当我通过显式定义PatentsController的索引操作和视图来覆盖BaseController实现时,我可以查看浏览器中的更改 - 它获取新的索引操作和视图 - 但是Cucumber步骤失败因为它似乎仍在查看BaseController索引操作和视图。
我created a gist有更多代码可供参考。
这是一个错误吗?有没有更好的方法来测试这个?
答案 0 :(得分:0)
Bonehead:我没有考虑现有的身份验证机制,因为测试请求未经过身份验证,因此会重定向。