变量前的爆炸是什么?

时间:2013-12-21 00:24:46

标签: ruby-on-rails unit-testing validation ruby-on-rails-4 ruby-2.0

我正在阅读关于测试的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
  • 如果我按原样离开,测试通过。
  • 如果我删除了爆炸,则测试失败(因为验证)
  • 如果我在保存之后将爆炸移动到异常(因为验证失败) 并且bang返回错误消息,我认为)

那么你能帮我理解吗,前面的爆炸是什么导致测试通过?

问题编辑/扩展:为什么第二次测试失败(F)而非异常(E)

2 个答案:

答案 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的结果。)