Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 铁路TDD:关于红-绿测试的澄清_Ruby On Rails_Ruby_Tdd - Fatal编程技术网

Ruby on rails 铁路TDD:关于红-绿测试的澄清

Ruby on rails 铁路TDD:关于红-绿测试的澄清,ruby-on-rails,ruby,tdd,Ruby On Rails,Ruby,Tdd,继Michael Hartl之后,我不确定以下验证测试应该如何工作: test "name should be present" do @user.name = " " assert_not @user.valid? end 编写此测试时,测试套件应为红色。在用户类中添加相应的部分后: class User < ActiveRecord::Base validates :name, presence: true end class用户

继Michael Hartl之后,我不确定以下验证测试应该如何工作:

test "name should be present" do
  @user.name = "     "
  assert_not @user.valid?
end
编写此测试时,测试套件应为红色。在用户类中添加相应的部分后:

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

测试变为绿色。我不明白前一部分是怎么工作的。测试是红色的,因为
验证
部分尚未实现吗?实现后,
@user.valid?
应该是
False
由于
assert\u not
而变成
True
。因此,测试是绿色的?

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

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

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

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

添加
将验证:name,presence:true
使模型检查是否存在有效的名称。因此,测试通过了