gpt4 book ai didi

ruby-on-rails - 使用 RSpec/FactoryGirl 设置嵌套关联的最佳方法

转载 作者:行者123 更新时间:2023-12-04 05:57:17 25 4
gpt4 key购买 nike

我正在尝试为 Rails 应用程序构建一个测试套件,但我不确定如何使用 FactoryGirl 构建对象(如有必要,我可以转移到其他工具)。

棘手的部分是有很深的嵌套关联,让我们以模式的这部分为例:http://imgur.com/HAUS7kr

假设我想对“ItemTracker”模型进行一些测试。现在有两种方法:

  • 为了拥有一个有效的对象,我需要构建一个 Connexion,它需要一个 token ,它需要一个项目,等等......此外,我希望 ProjectItem 的项目与 token 的项目相同。与公司相同的事情(在顶部)。我不想创建 2 个不同的项目或公司。所以我需要一种方法让这些对象共享一些关联。这种方法的一个缺点是我不确定如何不创建多个关联对象,而且我还将构建大量我不一定需要的对象(验证除外)
  • 我可以说“对于这个特定的测试,关联是不相关的,所以我只是要创建一个 ItemTracker,没有它的 Connexion 或 ProjectItem,并用这个孤立的对象做我的事情”。一般来说,我只会创建我实际需要的对象和关联。通过使用特征,我找到了一种方法来避免在不需要它们时创建关联。缺点是该对象将无效(对关联进行验证),因此每次我要尝试在其上保存某些内容时,都会出现异常,这在某些测试用例中会很痛苦。

  • 所以我想我的问题是:在这种复杂的对象结构中设置一些对象进行测试的最佳方法是什么?

    感谢您的反馈 ;)

    最佳答案

    无论如何,您都需要构建整个关系树,但您可以将其放入特征中,并在规范中创建具有特征 with_all_relations 的项目跟踪器。 , 例如。它看起来像这样:

    FactoryGirl.define do
    factory :item_tracker do
    ...
    trait :with_all_relations do
    after(:build) do |item_tracker|
    company = create(:company)
    item = create(:item, company: company)
    user = create(:user, company: company)
    ...
    item_tracker.project_item = project_item
    item_tracker.connexion = connexion
    end
    end
    end
    end

    如果您未指定任何特征,您将获得没有任何相关模型的项目跟踪器。

    关于ruby-on-rails - 使用 RSpec/FactoryGirl 设置嵌套关联的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34131207/

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