为什么'assert_not'而不是'!' 在编写Rails测试时?

Gab*_*vić 6 ruby testing ruby-on-rails

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

test "name should be present" do
    @user.name = "     "
    assert_not @user.valid?
end
Run Code Online (Sandbox Code Playgroud)

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

test "name should be present" do
    @user.name = "     "
    assert !@user.valid?
end
Run Code Online (Sandbox Code Playgroud)

Nic*_*eys 4

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

这与使用该语言的动机是相同的unless,而不是这样写:

if !@user.valid?
  # do stuff
end
Run Code Online (Sandbox Code Playgroud)

你会这样做:

unless @user.valid?
  # do stuff
end
Run Code Online (Sandbox Code Playgroud)

诚然, if/unless 差异读起来比更好assert_not,唉,这就是 Minitest 单元测试将为您带来的结果。如果您想让内容读起来更自然,请查看 Minitest 规范或 RSpec。