在Dusk中运行测试时,提交表单会生成验证错误,显示为“查询字段为必填”。使用手动输入测试页面时不会发生该错误。
我在处理POST请求的控制器方法的第一行中添加了dd( $request )
。当我手动测试页面时,系统将请求转储到页面。当我使用Dusk测试页面时,我得到了一个截图,该截图显示了从未执行过的代码行:页面重新加载并显示验证错误。
我已经在表单中搜索了名称为“ query”的隐藏输入。它不存在。
我已经在控制器类和基类中搜索了用于测试“查询”输入的所有验证。我什么都没找到。
任何人都可以向我指出正确的方向,以弄清楚为什么使用serve
命令可以使页面在自动测试环境中不起作用?
过去有人见过类似的错误吗?
答案 0 :(得分:0)
简短答案::检查页面以确认选择器正在获取正确的表单。在这种情况下,测试人员会忘记菜单栏中存在表单。测试是单击菜单栏中的按钮,而不是单击主页内容中的按钮。
原始文本: 我想有时候您只需要走开再回到问题上即可。我非常关注页面中心的表单,以至于忽略了菜单栏中带有输入名称为“ query”的输入的表单。
我在使用Dusk命令时单击了错误的按钮,因为我的选择器应用于单独表单上的多个按钮。
答案 1 :(得分:0)
对不起,我的回复很晚
例如,我们可以使用PostController作为Post
模型
您的商店功能可能看起来像
public function store(Request $request)
{
Post::create($request->all());
return redirect()->route('post.index')->with('success','PostCreated Successfully');
}
如果在函数开始时添加dd
函数,它将起作用,即dd($request->all());
但是如果您使用自定义要求
对于EG PostStoreRequest
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class PostStoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'post_name' => 'required',
];
}
/**
* Custom message for validation
*
* @return array
*/
public function messages()
{
return [
'post_name.required' => 'Enter Post Name',
];
}
}
和PostController@store
public function store(PostStoreRequest $request)
{
Post::create($request->all());
return redirect()->route('post.index')->with('success','PostCreated Successfully');
}
即使您在函数顶部添加dd
,因为它首先验证了请求,也将进入函数
希望有帮助