我有一个BaseController
,我想用其他控制器进行超类。我还使用标准ApplicationController
超级控制一些控制器。
例如,我可能有:
class AController < ApplicationController
end
以及......
class BController < BaseController
end
在测试时,我有时需要创建一个任意的&#34; mock&#34;或&#34;假的&#34;要测试before_filters,模块包括等等的课程。我不经常这样做,但有时它会有所帮助。
我在我的规格中创建了一个如此:
class FakeController < ApplicationController
end
没关系。
但是现在,我需要创建这些FakeController
类中的另一个,但这次是作为BaseController
类的子类。
不幸的是,FakeController
常量已经注册,我收到了超类错配错误。
我不想做FakeController2
之类的事情 - 我认为这会打开一堆坏虫。
有什么建议吗?
答案 0 :(得分:0)
我没有看到使用FakeController2
或任何其他名称的问题,但我能想到的唯一公共选择是引入一个模块,以便您的第二个FakeController
存在于不同的命名空间,如:
module Foo
class FakeController < ApplicationController
end
end
在remove_const
上定义了一个私有方法Kernel
,可用于从对象中取消注册常量。因此,如果在FakeController
上定义Object
,您可以通过调用取消注册:
Object.send(:remove_const, :FakeController)
此时,您可以再次定义常量,如果它从未在第一时间从未定义过。 (请记住:Ruby是一种解释性语言。)
答案 1 :(得分:0)
继承控制器的另一种方法是使用rspec-rails gem提供的anonymous controller mechanism。