2009-05-31 5 views
1

안녕하세요, 저는이 모든 것을 완전히 잃어 버렸습니다.유효한 수동 호출 지정?

사용자가 입력 할 때 ajax를 통해 입력란의 유효성을 검사하는 데 유용한 온라인 스 니펫을 발견했습니다. 그래서 나는 그것의 일부에 대한 스펙을 쓰려고 노력하고 있으며, 나는 그것을 통과시킬 수 없다.

1) 사양 : 모의 객체 :: MockExpectationError 에서 -

여기 내 테스트가

describe "POST validate" do 
    it "retrieves the user based on the past in username" do 
     mock_errors ||= mock("errors") 
     mock_errors.stub!(:[]).and_return(nil) 
     User.should_receive(:new).with({'username'=>"UserName"}).and_return(mock_user) 
     mock_user.should_receive(:valid?).and_return(true) 
     mock_errors.should_receive(:[]).with("username").and_return(nil) 
     put :validate, :field=>'username', :value=>'UserName'  
     response.should == "" 
    end 
    end 

나는이 오류가 지금까지 여기에 코드

def validate 
    field = params[:field] 
    user = User.new(field => params[:value]) 
    output = "" 
    user.valid? 
    if user.errors[field] != nil 
    if user.errors[field].class == String 
     output = "#{field.titleize} #{user.errors[field]}" 
    else 
     output = "#{field.titleize} #{user.errors[field].to_sentence}" 
    end 
    end 
    render :text => output 
end 

이고 'UsersController POST 유효성 확인 은 (는) 과거에 을 기반으로 사용자를 검색합니다. ("이름") 나는 세상에서 user.errors에 대한 호출 [필드]를 조롱하는 방법을 알아낼 수없는 것

와 [] : ername '모의'오류 ' 예상치 못한 메시지를 받았습니다. 이상적으로이 스펙은 행복한 경로를 테스트하지만 오류는 없습니다. 그런 다음 유효성 검사 실패로 다른 것을 작성합니다.

답변

1

mock_user가 표시되지 않습니다. 여기에서 샷입니다 :

describe "POST validate" do 
    it "retrieves the user based on the past in username" do 
    mock_errors = mock("errors") 
    mock_user = mock("user") 
    mock_user.stub!(:errors).and_return([mock_errors]) 
    mock_errors.stub!(:[]).and_return(nil) 
    User.should_receive(:new).with({'username'=>"UserName"}).and_return(mock_user) 
    mock_user.should_receive(:valid?).and_return(true) 
    mock_errors.should_receive(:[]).with("username").and_return(ActiveRecord::Errors.new({})) 
    put :validate, :field=>'username', :value=>'UserName'  
    response.should == "" 
    end 
end 

열쇠는 당신이 빈 해시 또는 필드 이름/오류의 해시 중 하나를 반환하여 오류 방법에 응답하여 사용자 모의을 필요로한다는 것입니다. 이것에 대한 대안은 조명기 교체 도구 중 하나를 사용하는 것입니다. 저는 지금 당장 기계공을 사용하고 있습니다.이 모든 것을 줄일 수 있습니다 :

describe "POST validate" do 
    it "retrieves the user based on the past in username" do 
    @user = User.make{'username'=>"UserName"} 
    @user.should_receive(:valid?).and_return(true) 
    @user.errors.should_receive(:[]).with("username").and_return(ActiveRecord::Errors.new({})) 
    put :validate, :field=>'username', :value=>'UserName'  
    response.should == "" 
    end 
end