我正在测试一个简单的密码重置操作,并希望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中打印值,但确实没有改变。
非常感谢您对此问题的任何想法!
答案 0 :(得分:0)
在第一个示例中,您需要使用call
来实际执行lambda。您将lambda分配给getter
,但从不执行getter.call
来实际执行lambda并获得结果。
答案 1 :(得分:0)