【问题标题】:Rspec tests fail in similar situationsRspec 测试在类似情况下失败
【发布时间】:2011-06-13 10:46:29
【问题描述】:

我的控制器中有以下方法:

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

我不明白为什么 create 方法的测试通过了,即使在保存对象后立即进行了重定向。如果我设置:

  response.should redirect_to log_in_path

如预期测试将失败,同样的 destroy 方法,如果我将预期切换到:

response.should be_success

它会失败。有什么建议么? 谢谢

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    您的创建操作的实际响应是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多