代码之家  ›  专栏  ›  技术社区  ›  Erik Öjebo

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

  •  3
  • Erik Öjebo  · 技术社区  · 15 年前

    由于Ruby社区可能是最受测试驱动的社区,而且Rails-ActiveRecord似乎很流行,所以在Ruby-onrails中必须有某种方式来组合基于TDD和ActiveRecord的代码。

    我猜这个问题在动态语言中会消失,但我不知道怎么解决。那么,诀窍是什么?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Robert Speicher    15 年前

    问题是赛程安排太糟糕了。不久前我读了一篇文章 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 能够 嘲笑他们,但在我有限的经验,努力是不值得的小业绩增益。大多数情况下,当我需要测试一种情况时,我会嘲笑( save 返回false,即使记录是有效的,以便我可以测试失败的条件)。

    在使用了这里提到的两个库之后,您不能再付钱给我使用fixture。

        2
  •  2
  •   retro    15 年前

    可以在测试中创建ActiveRecord实例。看 here 对于一些基本步骤,如何在Rails中使用简单的测试。

    你可以阅读Rails官方版 testing guide 在Rails中建立TDD的一些想象。还要看看另外两个流行的测试框架 RSpec (我最喜欢的,看 mocking screencast )以及 Shoulda