gpt4 book ai didi

ruby-on-rails - 如何测试模块在被 Controller 类包含时是否向 before_filter 添加方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:15 25 4
gpt4 key购买 nike

我想知道你会如何解决这个任务

您想重构以下代码

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com