RSpec - lambda用法

Kva*_*ass 7 ruby lambda rspec ruby-on-rails-3

有人可以向我解释以下方法之间的区别吗?

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

这就是目前的方法.这可以通过以下方法实现吗?

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

这些有效吗?或者第二个不起作用?因为我正在遵循的教程似乎尽可能使用response,但在上述情况下没有这样做.有人可以解释上述两种方法之间的区别,lambda和RSpec的响应如何工作?谢谢!

zet*_*tic 10

如果测试数据库为空,则lambda表单相当于执行此操作:

User.count.should == 0
post :create, :user => @attr
User.count.should == 1
Run Code Online (Sandbox Code Playgroud)

我相信change,如第二个示例中所示,在不提供块的情况下调用将生成错误.

lambda表单用于包装一段代码,可用于以更方便的方式设置期望,然后使用之前和之后的条件进行测试.在更新版本的RSpec中,您还可以看到以下内容expect:

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