【问题标题】:RSpec: Controller not updating record in test envRSpec:控制器未更新测试环境中的记录
【发布时间】:2017-03-31 18:44:46
【问题描述】:

这是一个奇怪的问题,所以我可能会对其进行编辑以根据需要填写一些上下文。我有一个 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 时,标题保持不变并且测试失败。这个完全相同的请求适用于在开发和生产环境中更新项目。关于为什么这不起作用的任何线索?

【问题讨论】:

  • 我实际上在测试中没有看到reload(你应该在那里做一个)。 200 会建议 (a) 存在您在测试中未处理的用户身份验证步骤或 (b) 存在验证问题。您可以在 upate 方法中使用 gem 'pry'binding.pry 来测试其中一个/两个。如果 pry 没有在 update 中执行,那么 update 没有执行(可能是用户身份验证问题),如果确实执行了,您可以查看 @project.errors.full_messages 以了解问题所在。
  • 您关于窥探错误消息的建议帮助我解决了这个问题。继续发布它作为答案,我会标记它
  • 很高兴,现在发布答案。干杯

标签: ruby-on-rails ruby rspec


【解决方案1】:

我实际上并没有在测试中看到重新加载(你应该在那里做一个)。 200 表示 (a) 存在您在测试中未处理的用户身份验证步骤或 (b) 存在验证问题。您可以在更新方法中使用gem 'pry'binding.pry 来测试其中一个/两个。如果 pry 没有在 update 中执行,则 update 没有执行(可能是用户身份验证问题),如果确实执行了,您可以查看 @project.errors.full_messages 以了解问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多