我想知道你会如何解决这个任务
您想重构以下代码
class AController < ActionController::Base
before_filter :the_method
protected
def the_method
end
end
进入
class AController < ActionController::Base
include TheModule
end
但作为 BDD 爱好者,您必须先编写规范
describe TheModule do
context "when included" do
it "adds #the_method as a before_filter" do
# insert your code here
end
end
end
换句话说,问题是: 如何编写一个规范来检查 TheModel#the_method 在包含在一个类(大概是一个 Controller 类)中时是否被添加为 before_filter。
最佳答案
您可以检查回调调用的方法是否存在。
@model.methods.include?('before_callback_method_name')
然而,这只是检查回调运行的方法是否存在,而不是它的特定类型。
我找不到获取模型回调列表的方法。
如果存在回调,唯一的选择是测试模型是否按预期运行,即如果回调在更新时反转字符串,请检查字符串在更新时是否反转。
* 编辑 *
您可以像这样检索回调列表:
@u._validate_callbacks
它返回一个回调链,其中包括名称和重要的类型。
>> u._validate_callbacks.first.class
=> ActiveSupport::Callbacks::Callback
>> u._validate_callbacks.first.kind
=> :before
>> u._validate_callbacks.first.filter
=> :validate_associated_records_for_sites
如果现在加载,应该能够准确测试。
关于ruby-on-rails - 如何测试模块在被 Controller 类包含时是否向 before_filter 添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4143664/