为什么'断言_不要'而不是'!'在编写Rails测试时?

时间:2015-01-15 20:14:25

标签: ruby-on-rails ruby testing

考虑这个例子,我们想检查是否允许用户使用空白名称(不应该):

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

问题是为什么assert_not存在?如果我们像这样使用assert会不会更好:

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

1 个答案:

答案 0 :(得分:3)

可能存在从断言中删除修饰符,这可能会改变其结果或模糊您实际要求的内容。实际上,它主要是一种风格选择。

在语言中使用unless的动机是相同的,而不是写这个:

if !@user.valid?
  # do stuff
end

你会这样做:

unless @user.valid?
  # do stuff
end

当然,if / unless差异读取方式assert_not更好,唉,Minitest单元测试会给你带来什么。如果您想更自然地阅读内容,请查看Minitest规范或RSpec。