gpt4 book ai didi

ruby-on-rails - 如何通过 mocha 和 test/unit 正确地 stub Rails 关联方法?

转载 作者:行者123 更新时间:2023-11-28 19:53:51 25 4
gpt4 key购买 nike

我正在开发一个应用程序,其中大部分(如果不是全部)数据都在 current_organization 范围内.因此,在我的 Controller 中的查找调用中,我有这样的事情,例如:

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

但是,在我的 Controller 测试中,我很难找出正确的方法(或任何方法)来 stub 这些调用,以便我可以测试如下内容:

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

那些说“AR 无法找到 ID=1 且 organization_id = 3 的用户”或其他内容的人失败了。无论我尝试什么,我似乎都无法绕过它。

我的设置 block 看起来像这样:

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) 的事情?这感觉不对,但也许这是正确的方法。

我正在寻找处理此问题的最佳方法。如果重要或有帮助,我正在使用 mocha 和测试/单元。

谢谢!

最佳答案

除非您特别需要访问 fake_users,否则我认为您可以做的最简单的事情可能是这样的:-

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

不幸的是,这种代码很难模拟。您会注意到我建议的解决方案相当脆弱。

关于ruby-on-rails - 如何通过 mocha 和 test/unit 正确地 stub Rails 关联方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352295/

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