我正在测试Rails中的应用程序并且出现故障我无法弄清楚。我有一张名为" Families"具有基本的CRUD功能。在创建一个新的"家庭"在新视图中,如果未验证标题,则应该再次呈现新视图。它是。但是网址从" families / new"更改和#34;家庭。"视图和URL不匹配。而我的测试结果却失败了。为什么会在我的网址中发生这种情况?这是我的测试:
require 'rails_helper'
feature "Creating a family" do
scenario "A user creates a family with invalid title" do
visit '/'
click_link 'Create Family'
click_button "Create"
expect(page.current_path).to eq(new_family_path)
end
end
以下是我的控制器中的新操作和创建操作:
def new
@family = Family.new
end
def create
@family = Family.new(family_params)
if @family.save
redirect_to root_path
else
flash.now[:danger] = "There was a problem"
render :new
end
end
家庭模特:
class Family < ApplicationRecord
validates :title, presence: true
end
答案 0 :(得分:2)
就在这里:
def create
@family = Family.new(family_params)
if @family.save
redirect_to root_path
else
flash.now[:danger] = "There was a problem"
render :new
end
end
当您点击create
操作时,您POST
为families
。然后,您render :new
- 离开families
网址,new
部分显示。
如果您希望以families/new
网址结尾,则需要执行以下操作:
def create
@family = Family.new(family_params)
if @family.save
redirect_to root_path
else
flash.now[:danger] = "There was a problem"
redirect_to new_family_path
end
end
请记住:渲染和路由是两个独立的事情。仅仅因为render :new
并不意味着您应该最终到达new_families_path
网址。两件不同的事情。
答案 1 :(得分:1)
正在呈现视图,但是因为您点击了POST端点create
然后呈现了new
,所以POST端点就是网址显示的内容。
您可能不希望将其更改为重定向到此处new
,因为您将丢失保存在@family
对象中的数据,我假设您使用该数据来显示用户输入在表格上。
我建议您检查表单是否再次在页面上呈现或显示Flash消息,而不是确认该网址是/new
。