Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby RSpec—lambda用法_Ruby_Ruby On Rails 3_Lambda_Rspec - Fatal编程技术网

Ruby RSpec—lambda用法

Ruby RSpec—lambda用法,ruby,ruby-on-rails-3,lambda,rspec,Ruby,Ruby On Rails 3,Lambda,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.s

有人能给我解释一下以下方法的区别吗

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
我相信调用
change
而不提供块(如第二个示例所示)将生成错误

lambda表单用于包装一段代码,该代码可用于以更方便的方式设置期望值,然后使用before和after条件进行测试。在RSpec的最新版本中,您还可以看到使用
expect

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

lambda方法表示总体操作将用户数更改为+1,其中第二种方法表示响应将用户数更改为+1。