2011-06-13 28 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 

我不明白爲什麼測試創建方法是通過即使在保存對象後立即有重定向。如果我設置:

response.should redirect_to log_in_path 

爲期望的測試將失敗,同樣爲破壞方法,如果切換到期望:

response.should be_success 

它將失敗。有什麼建議麼? 謝謝

回答

3

您的創建動作的實際響應是200 OK(即使您的模型無效並且未保存),這就是您現在正在測試的內容。

除此之外,你的創建測試是不好的。創建操作將用戶散列作爲參數,而不是用戶的ID。 你可能想要這樣的東西:

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