Ruby on rails RSpec:控制器未更新测试环境中的记录
这是一个奇怪的问题,所以我可能会根据需要编辑它来填充一些上下文。我有一个RSpec测试:Ruby on rails RSpec:控制器未更新测试环境中的记录,ruby-on-rails,ruby,rspec,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]
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_项目时,标题保持不变,测试失败。这个完全相同的请求用于在开发和生产环境中更新项目。关于为什么这不起作用,有什么线索吗?我在测试中没有看到重新加载,你应该在那里做一次。200建议要么存在测试中未处理的用户身份验证步骤,要么存在验证问题。您可以在更新方法中使用gem'pry'和binding.pry测试其中一个/两个。如果pry没有在update中执行,那么update可能没有执行用户身份验证问题,如果它确实执行了,您可以查看@project.errors.full_消息以了解问题所在。我在测试中没有实际看到重新加载,您应该在那里执行一次。200表示存在用户认证步骤,而您在测试中没有处理该步骤,或者存在验证问题。您可以在upate方法中使用gem'pry'和binding.pry测试其中一个/两个。如果pry未在更新中执行,则更新可能未执行用户身份验证问题,如果它确实执行,您可以查看@project.errors.full_消息以了解问题所在。您关于pry查找错误消息的建议帮助我解决了此问题。继续吧,把它作为一个答案贴出来,我会把它标记为乐意,现在就把答案贴出来。干杯