2013-03-20 123 views
1

我想编写与控制器测试相关的密码更新测试。我在控制器的第一行中找到经过身份验证的人员,并了解其状况。我如何写测试关联这一行。我无法想出任何想法。我该如何编写测试“where”行

ChangePasswordsController

def update 
    person = Person.where(_id: session[:user_id]).first 
    identity = Identity.where(_id: person.user_id).first 
    unless params[:new_password] != params[:new_password_confirmation] 
    identity.password = params[:new_password].to_s 
    identity.password_confirmation = params[:new_password].to_s 
    identity.save 
    redirect_to root_url, :notice => "Password has been changed." + person.user_id 
    else 
    redirect_to :back, :alert => "Password & password confirmation are not match" 
    end 
end 

ChangePasswordsController测试

describe ChangePasswordsController do 

    setup do 
    request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:identity] 
    @auth=request.env["omniauth.auth"] 
    end 

    it "should have edit action" do 
    get :edit 
    assert_response :success 
    end 

    it "should find person" do 
    ... 
    end 

    it "should find identity" do 
    ... 
    end 

end 

回答

0

我不认为那里是否找到一个人或不应该写一个测试。在这种情况下,您最好检查update方法是否使用给定参数调用Person上的find方法。使用像这样的东西:

Person.should_receive(:find).with(id: <the userid you've setup for the test>) {[Person.new]} 

它应该也能够先检查,但我不记得,与chainstubbing有关。

相关问题