【问题标题】:Writing a test for a Rails 3 model method that involves multiple associations为涉及多个关联的 Rails 3 模型方法编写测试
【发布时间】:2013-06-26 19:56:30
【问题描述】:

我对测试驱动开发的概念很陌生(对 Rails 也很陌生)。我不知道如何为我的应用程序编写测试。

作为背景资料,网络应用程序是一种同行评估工具,其中为各个小组分配调查,要求他们评估他们的同行。所以一个示例问题如下所示:

Rate your peers on time management.
 - Peer 1: __
 - Peer 2: __
 - Yourself: __

我如何在内部进行此设置:

我有一个Survey 模型,它与Assignment 模型(控制组间调查的可见性)有一个has_many 关联,它充当SurveyGroup 模型的连接模型。在Group 模型中有一个has_manyUsers 的关联。

因为可以为多个组分配同一个调查,所以我必须找出某个用户被要求评估哪个Group。 (因此调查将是相同的,但出现在上面示例中的人会因用户而异)。

我决定创建一个方法assignees_for_user(user),它本质上将返回已分配给调查的用户组。

我希望能够对这个方法进行单元测试。到目前为止,我正在使用 rspec 和 factory_girl。我有几个问题:

  1. 我的方法在设计方面是否正确?
  2. 我应该对此进行测试吗?如果是这样,我需要为AssignmentGroupUser 创建实例,对吗?
  3. 我可以存根/模拟这些实例而不将它们持久化到数据库中的最佳方法是什么?还是我必须这样做?

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 unit-testing rspec tdd factory-bot


    【解决方案1】:

    这个答案比我预期的要复杂(老实说,我想这就是为什么没有人回答它的原因:P)

    您可以使用 mocha 之类的框架来模拟 find:How to test ActiveRecord witout Rails? 之类的东西

    我最终改用了 rr。但是说到ActiveRecord关联,我还没有找到好的办法,因为我对ActiveRecord关联代理对象还不是很了解。所以我想我对所有这一切的看法是,老实说,首先不要浪费我的时间来嘲笑关联:正如一句老话所说,你不能对不属于你自己的东西进行单元测试!

    【讨论】:

      【解决方案2】:

      我能否建议将业务逻辑从 activerecord 模型(将其视为数据库适配器)和控制器(将其视为 GUI 适配器)重构为 lib/ 中的普通旧 ruby​​ 对象 (PORO) 是路要走。

      Hexagonal Rails by Matt WynneRails Conf 2013 Building Extractable Libraries in Rails by Patrick RobertsonMaking ActiveRecord Models Thin 和 Gary Bernhardt 是不错的起点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多