[英]Dusk does not handle POST requests the same way Laravel does when testing a form submission
在Dusk中运行测试时,提交表单会生成验证错误,该错误显示为“查询字段是必需的”。 使用手动输入测试页面时不会发生该错误。
我在处理POST请求的控制器方法的第一行中添加了dd( $request )
。 当我手动测试页面时,系统将请求转储到页面。 当我使用Dusk测试页面时,我得到了一个截图,该截图显示了从未执行过的代码行:页面重新加载并显示验证错误。
我已经在表单中搜索了名称为“ query”的隐藏输入。 它不存在。
我已经在控制器类和基类中搜索了用于测试“查询”输入的任何验证。 我什么都没找到。
任何人都可以向我指出正确的方向,以找出为什么该页面在使用serve
命令可以正常工作时在自动化测试环境中不起作用?
过去有没有人看到过类似的错误?
简短答案:检查页面以确认选择器正在获取正确的表单。 在这种情况下,测试人员会忘记菜单栏中存在表单。 测试是单击菜单栏中的按钮,而不是单击主页内容中的按钮。
原文:我想有时候您只需要走开再回到问题上即可。 我非常关注页面中心的表单,以至于忽略了菜单栏中带有输入名称为“ query”的输入的表单。
我用Dusk命令单击了错误的按钮,因为我的选择器应用于单独表单上的多个按钮。
这么晚才回复很抱歉
例如,我们可以使用PostController作为Post
Model
您的商店功能可能看起来像
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
也是因为它首先验证了请求,然后它将进入函数
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.