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