gpt4 book ai didi

ruby - 如何模拟已模拟对象的实例方法?

转载 作者:数据小太阳 更新时间:2023-10-29 07:42:52 26 4
gpt4 key购买 nike

我需要模拟以下内容:

Class User
def facebook
#returns an instance of a facebook gem
end
end

所以在我的用户测试中,要访问用户的 facebook 信息,我需要调用 user.facebook.me.info 来检索它的信息。如果我想模拟这个,我目前正在使用以下内容:

@user = Factory(:user)
facebook = mock()
me = mock()
me.expects(:info).returns({"name" => "John Doe"})
facebook.expects(:me).returns(me)
@user.expects(:facebook).returns(facebook)
assert_equal "John Doe", @user.facebook.me.info["name"]

这可行,但似乎有点笨拙,有没有更好的方法来做到这一点?

[编辑] 我使用 mocha 作为模拟框架

最佳答案

你可以尝试这样的事情:-

user = Factory(:user)
user.stubs(:facebook => stub(:me => stub(:info => {:name => "John Doe"})))

如果您真的想检查是否调用了所有这些方法(我怀疑您没有),您可以执行以下操作:-

user = Factory(:user)
user.expects(:facebook => mock(:me => mock(:info => {:name => "John Doe"})))

有点冗长,但通常值得为每个模拟对象命名:-

user = Factory(:user)
user.stubs(:facebook => stub('facebook', :me => stub('me', :info => {:name => "John Doe"})))

希望对您有所帮助。

关于ruby - 如何模拟已模拟对象的实例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008681/

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