我正在尝试使用 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 索引操作和视图。
我创建了一个包含更多代码的要点以供参考。
这是一个错误吗?有没有更好的方法来测试这个?