【问题标题】:How to properly stub a Rails association methods via mocha and test/unit?如何通过 mocha 和 test/unit 正确地存根 Rails 关联方法?
【发布时间】:2010-12-04 06:32:04
【问题描述】:

我正在开发一个应用程序,其中大部分(如果不是全部)数据的范围为current_organization。所以在我的控制器中的 find 调用中,我有这样的事情,例如:

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

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

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

那些没有说“AR 找不到 ID=1 和组织 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) 之类的操作?这感觉不对,但也许这是正确的方法。

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails testing mocha.js


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      相关资源
      最近更新 更多