我需要模拟以下内容:
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"})))
我希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)