带和不带lambda +的控制器规格“应该改变”

时间:2010-07-22 14:05:22

标签: ruby-on-rails rspec

我正在测试一个简单的密码重置操作,并希望RSpec为lambdas“更改”匹配器。但它不适用于此控制器操作。没有匹配器,一切正常。这是规范:

  describe "#update" do
it "Updates the password and resets the token" do
  @user = Factory :user
  getter = lambda{
    get :edit, :id => @user.perishable_token, :user => {:password_confirmation => "new_password",
                                                      :password => "new_password"}
    @user.reload
  }
  getter.should change(@user, :password)
  getter.should change(@user, :perishable_token)
end

it "Updates the password and resets the token" do
  @user = Factory :user
  old_password = @user.password
  old_token = @user.perishable_token
  get :edit, :id => @user.perishable_token, :user => {:password_confirmation => "new_password",
                                                      :password => "new_password"}        
  @user.reload.password.should != old_password
  @user.perishable_token.should != old_token
end
end

第二个it-block有效,第一个没有。我试图在lambda中打印值,但确实没有改变。

非常感谢您对此问题的任何想法!

2 个答案:

答案 0 :(得分:0)

在第一个示例中,您需要使用call来实际执行lambda。您将lambda分配给getter,但从不执行getter.call来实际执行lambda并获得结果。

答案 1 :(得分:0)