有人可以向我解释以下方法之间的区别吗?
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 的响应是如何工作的吗?谢谢!
最佳答案
如果测试数据库为空,lambda 形式相当于这样做:
User.count.should == 0
post :create, :user => @attr
User.count.should == 1
我相信,如您在第二个示例中所示,在不提供 block 的情况下调用 change
会产生错误。
lambda 形式用于包装一段代码,可用于以更方便的方式设置期望,然后使用前后条件进行测试。在 RSpec 的更新版本中,您还会看到使用 expect
完成此操作:
expect {
post :create, :user => @attr
}.to change(User, :count).by(1)
关于ruby - RSpec -- lambda 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456365/