2011-06-13 3 views
0

나는 다음 내 컨트롤러 방법이 있습니다RSpec에 테스트는 비슷한 상황에서 실패

def create 
    @user = User.new(params[:user]) 
    if @user.save   
     redirect_to log_in_path, notice: 'Signed up!' 
    else 
     render "new" 
    end 
end 

def destroy 
    @user = User.find(params[:id]) 
    @user.destroy 
    redirect_to users_path, notice: 'User was deleted.' 
end 

및 사양 : 통과 에 대한 테스트가 방법을 만들 이유

describe "POST 'create'" do 
    it "should allow create user" do 
    @user = Factory(:user) 
    post 'create', :id => @user 
    response.should be_success 
    end 

describe "DELETE 'destroy'" do  
    it "should delete the user" do 
    @user = Factory(:user) 
    delete "destroy", :id => @user 
    response.should redirect_to users_path 
    end 
end 

내가 이해하지 못하는 것입니다 개체를 저장 한 직후 리디렉션이있는 경우에도 마찬가지입니다. 내가 설정 한 경우 : I가 기대를 전환하는 경우

response.should redirect_to log_in_path 

에 대한 동일한 테스트가 실패합니다 기대로, 방법을 파괴 :

response.should be_success 

실패합니다. 어떤 제안? 감사합니다.

답변

3

작성 액션의 실제 응답은 모델이 유효하지 않고 저장되지 않은 경우에도 200 OK이며 현재 테스트중인 것입니다.

이외의 테스트는 좋지 않습니다. 액션 만들기는 사용자의 ID가 아닌 사용자 해시를 param으로 사용합니다. 아마도 다음과 같을 것입니다.

it "should allow create user" do 
    @user = Factory.attributes_for(:user) 
    post 'create', :user => @user 
    @user.persisted?.should be_true 
    response.should be_redirect 
    end