1

我正在尝试使用 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 索引操作和视图。

创建了一个包含更多代码的要点以供参考。

这是一个错误吗?有没有更好的方法来测试这个?

4

1 回答 1

0

Bonehead:我没有考虑现有的身份验证机制,因为测试请求没有经过身份验证,所以它正在重定向。

于 2012-09-28T20:23:35.937 回答