【发布时间】: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