gpt4 book ai didi

ruby-on-rails - ActiveRecord 是否使 Ruby on Rails 代码难以测试?

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:30 25 4
gpt4 key购买 nike

我大部分时间都在使用静态类型语言(主要是 C#)。由于静态方法以及实体和数据访问代码的混合,我在 Active Record 模式和单元测试方面有过一些糟糕的经历。

由于 Ruby 社区可能是最受测试驱动的社区,而且 Rails ActiveRecord 似乎很受欢迎,因此必须有某种方法可以在 Ruby on Rails 中结合 TDD 和基于 ActiveRecord 的代码。

我猜想这个问题在动态语言中以某种方式消失了,但我不知道如何解决。那么,诀窍是什么?

最佳答案

问题是固定装置太糟糕了。前段时间我读了一篇文章 The Lie它让我大开眼界。本文重点Machinist ,我用过并且喜欢,但目前我更喜欢 factory_girl .这是他们自述文件中的一个基本示例:

您定义一个具有足够默认值的工厂来让您的测试通过:

# This will guess the User class
Factory.define :user do |u|
u.first_name 'John'
u.last_name 'Doe'
u.admin false
end

然后在您的测试中,您可以根据需要覆盖或添加值(人为的 RSpec 示例)

describe User, "#is_admin?" do
before(:each) do
@user = Factory(:user, :admin => true, :email => 'jdoe@email.com')
end

it "should be true"
@user.is_admin?.should be_true
end
end

@user 现在是一个真实的、实时的、工作的 ActiveRecord 模型,它(暂时)存在于测试数据库中。您也可以在 Controller 测试中使用工厂。您可以 mock 它们,但以我有限的经验,这种努力不值得获得微小的性能提升。大多数情况下,我会在需要测试条件时进行模拟(即使记录有效,save 也会返回 false,以便我可以测试失败的条件)。

使用了这里提到的两个库之后,你就不能再花钱让我使用fixtures了。

关于ruby-on-rails - ActiveRecord 是否使 Ruby on Rails 代码难以测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663270/

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