如何解决MiniTest 控制器更新 - 预期响应为 <3XX: redirect>,但为 <200: OK>
我有一些控制器测试一直失败,但我不知道为什么。控制器 update
操作:
def update
respond_to do |format|
if @tag_category.update(tag_category_params)
format.html { redirect_to company_tags_url,notice: 'Tag category was successfully updated.' }
else
format.html { render :edit }
end
end
end
和相应的测试:
test "should update tag_category" do
patch company_tag_category_url(@tag_category),params: { ... }
assert_redirected_to company_tags_url
end
测试失败(其他控制器也有同样的问题:
FAIL["test_should_update_tag_category",#<Minitest::Reporters::Suite:0x00007f973befd100 @name="TagCategoriesControllerTest">,62.38744100002805]
test_should_update_tag_category#TagCategoriesControllerTest (62.39s)
Expected response to be a <3XX: redirect>,but was a <200: OK>
test/controllers/tag_categories_controller_test.rb:44:in `block in <class:TagCategoriesControllerTest>'
我的 create
操作具有完全相同的重定向逻辑,但测试如下:
test "should create tag_category" do
assert_difference('TagCategory.count') do
post company_tag_categories_url,params: { ... }
end
assert_redirected_to company_tags_url
end
我似乎在这里遗漏了一些明显的东西。我试过 follow_redirect! 但这没有用。断言看到补丁返回 200 而不是接下来的重定向。
赏金更新
在其他测试中发现这个 - 这个工作正常(在浏览器中重定向并且可以在日志中看到重定向):
控制器:
# PATCH/PUT /wbs/1
def update
authorize @wbs
if @wbs.update(wbs_params)
redirect_to @wbs,notice: 'Work breakdown structure was successfully updated.'
else
render :edit
end
end
测试:
test "should update work_breakdown_structure" do
patch work_breakdown_structure_url(@work_breakdown_structure),params: { work_breakdown_structure: { description: @work_breakdown_structure.description } }
assert_redirected_to work_breakdown_structure_url(@work_breakdown_structure)
end
这个失败了:
控制器:
# PATCH/PUT /wells/1
def update
authorize @well
if @well.update(well_params)
redirect_to @well,notice: 'Well was successfully updated.'
else
render :edit
end
end
测试:
test "should update well" do
patch well_url(@well),params: { well: { description: @well.description } }
assert_redirected_to well_url(@well)
end
解决方法
在您的控制器方法中,您有一个控制流来检查 @tag_category
实例是否已成功更新。如果是,它会重定向到 company_tags_url
。如果不是,则呈现 :edit
视图。
我的猜测是模型没有得到更新,控制器正在响应 else
块下的条件(执行 render
时,rails 将响应 200)。
不要呈现编辑视图,而是尝试将用户重定向到 edit_company_tag_path(@tag_category)
,如果是这种情况,您的测试将失败,不是因为它期待 3XX 响应,而是因为它被重定向到错误的页面。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。