【问题标题】:TDD in Rails: clarification on Red - Green testingRails 中的 TDD:关于红 - 绿测试的说明
【发布时间】:2015-03-27 22:48:49
【问题描述】:

按照 Michael Hartl 的 Rails tutorial,我不确定以下验证测试应该如何工作:

test "name should be present" do
  @user.name = "     "
  assert_not @user.valid?
end

编写此测试时,测试套件应为红色。在 User 类中添加相应部分后:

class User < ActiveRecord::Base
  validates :name, presence: true
end

测试变为绿色。我不明白前一部分是如何工作的。测试红色是因为validates 部分还没有实现吗?实现之后,@user.valid? 应该是 False 变成 True,因为 assert_not。因此,测试是绿色的?

【问题讨论】:

    标签: ruby-on-rails ruby tdd


    【解决方案1】:

    你对它有正确的理解。在将 Rails 中的模型保存到数据库之前,必须对其进行验证。这里的测试是检查用户模型是否被认为是有效的并以空白名称保存。因此,在添加 validates :name, presence: true 之前,@user.valid? 的计算结果为 true,测试失败。添加验证后,模型将被视为无效。

    【讨论】:

      【解决方案2】:

      在测试驱动开发 (TDD) 方法中,我们在编写代码之前先编写测试。因此,我们先让测试失败,然后编写一些代码让测试通过。

      【讨论】:

        【解决方案3】:

        看起来您确实对正在发生的事情有正确的理解。

        assert_not @user.valid? 表示@user 对象无效。以@user.name开头设置为空值;所以我们希望它的断言能够通过。但是,代码尚未检查是否存在有效名称。所以它失败了。

        添加validates :name, presence: true 使模型检查是否存在有效名称。这样测试就通过了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          相关资源
          最近更新 更多