2010-12-04 35 views
4

我正在研究一个应用程序,其中大部分(如果不是全部)数据的范围都是current_organization。所以,在我的控制器,我找电话,我有这样的事情,例如:如何通过摩卡和测试/单元正确存根Rails关联方法?

def show 
    @user = current_organization.users.find(params[:id]) 
end 

然而,在我的控制器的测试中,我有一个很难搞清楚的正确方法(或任何方式)存根这些电话,这样我可以测试的东西,如:

get :show, :id => 1 
assert_response :success 

这些都没有说“AR无法找到ID = 1的organization_ID = 3用户”或什么的。无论我尝试什么,我似乎都无法解决它。

我的设置块看起来是这样的:

setup do 
    company = organizations(:company) # fixture 
    @controller.stubs(:current_organization).returns(company) 
    # now what do I stub, if anything? 
end 

我试图做这样的东西:company.stubs(:users).returns([users(:one), users(:two)])但由于AR find()调用没有一个基本的阵列存在不起作用。

我是否应该将假用户数组设置为像fake_users这样的变量,然后执行类似fake_users.stubs(:find).returns(@user)的操作?那感觉不对,但也许这是正确的方法。

我只是寻找最好的方法来处理这个问题。我使用摩卡和测试/单位,如果这很重要或有帮助。

谢谢!

回答

2

除非特别需要访问fake_users,我觉得你可以做最简单的事情大概是这样的: -

company.stubs(:users => stub('users', :find => users(:one))) 

不幸的是,这种代码是尴尬的嘲笑。您会注意到我建议的解决方案非常脆弱。

+0

谢谢,这应该适合我需要的。 – rpheath 2010-12-04 23:03:10