2012-05-11 2 views
2

저는 Rspec을 처음 사용하기 때문에 컨트롤러가 무엇인지 말해주십시오. 다음 두 가지 방법에 대한 사양입니다. 인덱스 방법에서만 사용자 이름 컨트롤을 입력하여 볼 수있는 로그인 컨트롤이 로그인 메서드로 이동하고 사람의 이름을 찾습니다. 사람이 발견되면 통제는 사람의 경로로 이동합니다. 그렇지 않으면 색인 페이지 자체 인 루트 경로로 돌아갑니다.Rspec 컨트롤러 사양

class HomeController < ApplicationController 
def index 

end 

def login 
    @person = Person.find(:all, :conditions => ['people.name =?', params[:person][:name]]) 

    if @person.blank? 
    redirect_to root_path   
    else 
    redirect_to people_path 
    end 
end 
end 

도와주세요.
감사합니다.

+0

왜 그런 사람을 찾으십니까? @person = Person.find_by_name (params [: person] [: name])이 더 쉬울까요? – Jords

답변

5

귀하의 RSpec에 컨트롤러 테스트는 다음과 같이 할 수있다 :

describe HomeController do 
    render_views 
    it "Logs in Person with non-blank name" do 
    person = Factory(:Person, name: "non-blank name") 
    get :login 
    response.should redirect_to(people_path) 
    end 
    it "does not log in Person with blank name" do 
    person = Factory(:Person, name: "") # blank name 
    get :login 
    response.should redirect_to(root_path) 
    end 
end 

자세한 것은 rails controller specs를 참조하십시오.

EDIT :

공장 (이 경우에 시험 대상물) 오브젝트를 생성하는 코드를 포함 할 수있다. 이는 중복을 최소화하면서 다양한 속성을 가진 객체를 만들기 위해 코드를 사용자 정의 할 수 있기 때문에 테스트 객체를 만드는 데 선호되는 방법입니다.

설비 : 공장을 사용하지 않는 경우, 생성하려는 각 객체의 속성을 지정할 수 있습니다. 2-3 개가 넘는 오브젝트의 경우,이 데이터는 관리하기가 쉽지 않게됩니다 (예를 들어, 속성을 추가 할 때 각 오브젝트에 대해 변경해야 함).

스텁 : 모델 개체를 만드는 동안 데이터베이스 레코드를 만들지 않으려면 모델 코드 테스트 컨트롤러를 스텁링 할 수 있습니다. (. :이 코드는 FactoryGirl 보석의 이전 버전을 의미 FactoryGirl의 최신 API는 아래를 참조하십시오 주)
3
1 testing guide
을 :

은 자세한 내용을 참조하십시오. FactoryGirl Readme

+0

답변 해 주셔서 감사합니다. Rspec을 처음 접하니 감사드립니다. 코드에서 Factory가 무엇인지 설명하고 Factory, Fixtures, Stub 및 Matchers를 사용하는 것의 차이점은 무엇입니까? –

+0

그에 따라 답변을 업데이트했습니다. – Salil

+0

감사합니다. 매우 유용합니다. –

관련 문제