【发布时间】:2013-03-25 17:06:03
【问题描述】:
我有一个具有某些功能的基本控制器,该基本控制器无法从外部访问,没有与之匹配的路由。
然后,我使用其他控制器扩展该控制器以添加额外的功能,并且使用路由,我有 3 个控制器扩展该基本控制器,只是为了在每个控制器上定义 3 个方法。
我想测试基本控制器,但我做不到
post :index
因为该操作没有路由(没有路由匹配错误)
我不想将这些测试添加到这 3 个控制器之一,因为它们变化很大(控制器在... 3 周的活动期间使用,然后被删除)。
一些代码...:
基本控制器,CampaignController
class CampaignController < ApplicationController
def index
#some code...
end
def campaign_name
raise('campaign_name missing')
end
def campaign_url
raise('campaign_url missing')
end
#more actions....
end
可访问的控制器之一,SchoolCampaignController
class SchoolCampaignController < CampaignController
def campaign_name
'school'
end
def campaign_url
school_url
end
end
这些控制器基本上就是这样,但有时我需要覆盖其中一个基本操作
那么,我做错了什么?如何正确测试 CampaignController?
编辑:我不想测试这两种引发错误的方法,例如我想测试 index 或其他一些操作(未显示)
我尝试过使用“response = controller.index”,但它没有调用之前的过滤器,并且响应不是 http 响应,它只是该命令的输出(我不能像.. .response.should render_template(xxxx) with that)
编辑 2:为了绕过路由错误,我在 before(:all) 块中创建了测试内部的路由,然后路由不是问题,但是现在,我收到关于不存在视图的错误(每个都可以访问控制器实现所有视图,但抽象视图没有)
【问题讨论】:
-
the controller is used during a campaign of... 3 weeks and then deleted- 在我看来这应该是数据,而不是代码。 -
我想知道您是否可以将控制器的功能分解为 PORO 并像 Corey Haines 在他的“快速测试”视频中所做的那样测试该功能:youtube.com/watch?v=bNn6M2vqxHE
-
Jason,假设控制器没有被删除,它们永远存在,我想在没有路由/视图的抽象控制器上测试它们之间的共享代码,我会看到那个视频,希望有帮助
标签: ruby-on-rails rspec controller