我正在阅读关于测试的RoR指南(http://guides.rubyonrails.org/testing.html)
大约1/5页面显示“”要查看如何报告测试失败,您可以在post_test.rb测试用例中添加失败的测试。“
test "should not save post without title" do
post = Post.new
assert !post.save
end
我试图了解在发布保存之前使用bang(!)意味着什么。
在我正在开发的应用中,我在模型中有一个验证
validates :post, presence: true
那么你能帮我理解吗,前面的爆炸是什么导致测试通过?
问题编辑/扩展:为什么第二次测试失败(F)而非异常(E)
答案 0 :(得分:0)
bang(!)反转post.save
assert post.save
读取断言帖子 保存
assert !post.save
读取断言帖子不保存
查看http://www.tutorialspoint.com/ruby/ruby_operators.htm
上的Ruby Logical Operators部分修改扩展问题:
assert
寻找真实的结果。如果结果为true,则返回该测试的过程。如果结果不为真,则返回该测试的失败。
asset
方法的一些伪代码,
def assert(result)
if result == true
return 'Pass'
else
return 'Fail'
end
end
assert true
=> 'Pass'
assert false
=> 'Fail'
如果测试或代码中存在异常,test
方法将解除异常并返回(E)。
test
方法的一些伪代码,
def test(description, &block)
begin
yield
rescue
return 'Exception'
end
end
test 'test description' do
raise 'An error occurred'
end
=> 'Exception'
答案 1 :(得分:0)
!
是Logical Not前缀运算符 - 它与变量或方法无关。
可以概括为:
x !x
--------- ---------
nil true
false true
true false
<other> false
(在这种情况下,x
是评估post.save
的结果。)