RSpec:控制器不在测试环境中更新记录

时间:2017-03-31 18:44:47

标签: ruby-on-rails ruby rspec

这是一个奇怪的问题所以我可能正在编辑这个以根据需要填写一些上下文。我有一个RSpec测试:

    it "should update object paramaters" do
      put :update, params: {id: test_project, project: valid_params}
      test_project.reload
      expect(test_project.title).to eql valid_params[:title]
      expect(test_project.created_at).to_not eql test_project.updated_at
    end

相关控制器操作:

  # @project is defined in a before_action
  def update
    if @project.update_attributes(project_params)
      redirect_to @project, flash: { success: "Project successfully updated!" }
    else
      render :edit
    end
  end

此请求返回200 OK(我希望是重定向代码,但事实并非如此)响应代码,但是当我重新加载test_project时,标题保持不变并且测试失败。此完全相同的请求适用于在开发和生产环境中更新项目。关于为什么这不起作用的任何线索?

1 个答案:

答案 0 :(得分:1)

我实际上没有看到测试中的重新加载(你应该在那里做一个)。 200会建议eihter(a)有一个用户认证步骤,你在测试中没有处理过,或者(b)有一个验证问题。你可以在你的upate方法中使用gem'prie'和binding.pry来测试其中一个/两个。如果pry没有在更新中执行,那么更新没有执行(可能是用户身份验证问题),如果确实执行了,你可以查看@project.errors.full_messages以查看问题所在。