2011-06-23 69 views
7

有人可以向我解释以下方法之间的区别吗?RSpec - 拉姆达用法

it "should create a user" do 
    lambda do 
     post :create, :user => @attr 
    end.should change(User, :count).by(1) 
end 

这是目前的方法。这也可以用下面的方法来实现吗?

it "should create a user" do 
    post :create, :user => @attr 
    response.should change(User, :count).by(1) 
end 

这些实际上是一样的吗?还是第二个不行?因为我所遵循的教程似乎尽可能使用response,但在上述情况下却没有这样做。有人可以解释上述两种方法之间的区别,lambda和RSpec的响应如何工作?谢谢!

+0

拉姆达方法,指出总体行动+1更改的用户数,其中作为第二个方法陈述响应改变用户数+1。 – basicxman

回答

10

拉姆达形式等同于这样做,如果测试数据库是空的:

User.count.should == 0 
post :create, :user => @attr 
User.count.should == 1 

我相信,打电话change没有提供一个块,因为你在第二个例子中显示,将产生一个错误。

lambda表单用于包装一段代码,可用于以更方便的方式设置期望值,然后使用之前和之后的条件进行测试。在较新版本的RSpec的你也看到这一点expect做:

expect { 
    post :create, :user => @attr 
}.to change(User, :count).by(1)