gpt4 book ai didi

ruby-on-rails - 模拟/ stub "instance.extend(DecoratorModule)"中包含的方法

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

我使用了一个包含在模型实例中的装饰器模块(通过“扩展”方法)。例如:

module Decorator
def foo
end
end

class Model < ActiveRecord::Base
end

class ModelsController < ApplicationController
def bar
@model = Model.find(params[:id])
@model.extend(Decorator)
@model.foo
end
end

然后我想在测试中执行以下操作(使用 Mocha):

test "bar" do
Model.any_instance.expects(:foo).returns("bar")
get :bar
end

这是否可能,或者您是否有任何其他方式来获得此功能???

最佳答案

只是一个假设 注意:我假设您的 Decorator foo 方法返回“bar”,您发送的代码中没有显示它。如果我不假设这一点,那么期望无论如何都会失败,因为该方法返回 nil 而不是“bar”。

假设如上,我已经用一个全新的 Rails 应用程序尝试了整个故事,我意识到这是不可能的。这是因为当在您的测试中调用预期 方法时,方法“foo”未附加到类Model

我在预期 中试图跟踪被调用方法的堆栈时得出了这个结论。 期望Mocha::Central 中调用 stub ,它在Mocha::ClassMethod stub em>,它在 Mocha::AnyInstanceMethod 中调用 *hide_original_method*。在那里,*hide_original_method* 没有找到任何隐藏方法,也什么都不做。然后 Model.foo 方法不是 stub mocha 方法的别名,应该调用它来实现你的 mocha 期望,但实际的 Model.foo 方法被调用,一个您动态附加到 Controller 内的模型实例。

我的回答是不可能。

关于ruby-on-rails - 模拟/ stub "instance.extend(DecoratorModule)"中包含的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704033/

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