ruby-on-rails - 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
块下的条件(rails 将在执行时以 200 响应render
)。
尝试将用户重定向到 edit_company_tag_path(@tag_category)
,而不是呈现编辑视图,如果是这种情况,您的测试将失败,不是因为它期待 3XX 响应,而是因为它被重定向到错误的页面。
推荐阅读
- python - 更新到散景 1.2 后,我在使用 gridplot 运行散景应用时遇到了几个问题
- macos - 使用终端将大量文件合并到一个文件中
- java - java.lang.IllegalArgumentException:非法字符 OpenIAM-SCIM 连接器
- python - 拆分为用逗号分隔的多列值
- php - [symfony] 连接注册在同一页面?
- regex - Spamassassin 特有的正则表达式帮助
- microsoft-graph-api - 通过 Graph API 将文件从 OneDrive 帐户安全地提供给 webapp 用户
- c# - 在 NUnit 测试期间创建 Microsoft PointOfService 的 PosExplorer 对象时出现异常
- makefile - 编译驱动程序时条件 CCOPT 未传递给 subMakefile
- c++ - 当其中一个函数无法编译时,函数重载查找如何工作?