理解Ruby on Rails中的assert_difference

nev*_*ame 14 ruby-on-rails

有谁能解释一下这个测试代码的作用?:

assert_difference('Post.count') do
    post :create, :post => { :title => 'Hi', :body => 'This is my first post.'}
end
Run Code Online (Sandbox Code Playgroud)

和:

assert_difference 'ActionMailer::Base.deliveries.size', +1 do
  post :invite_friend, :email => 'friend@example.com'
end
Run Code Online (Sandbox Code Playgroud)

即使我阅读文档,我也无法理解.

谢谢!

Gre*_*ell 29

assert_difference验证eval在调用传递的块之后,评估其第一个参数(可传递给的String )的结果会改变一定量.上面的第一个例子可以"展开"到:

before = Post.count # technically, eval("Post.count")
post :create, :post => { :title => 'Hi', :body => 'This is my first post.'}
after = Post.count
assert_equal after, before + 1
Run Code Online (Sandbox Code Playgroud)

  • @fayer - 我相信默认值是“+1”。在第二个例子中,他们只是明确地说明了这一点。 (2认同)

Mit*_*sey 6

这只是检查以确保指定的任何类型的对象数增加1.(这是一种检查以查看对象是否已添加到数据库的简单方法)