黄昏无法像测试Laravel提交表单一样处理POST请求

时间:2019-01-17 00:42:12

标签: php laravel laravel-dusk

在Dusk中运行测试时,提交表单会生成验证错误,显示为“查询字段为必填”。使用手动输入测试页面时不会发生该错误。

我在处理POST请求的控制器方法的第一行中添加了dd( $request )。当我手动测试页面时,系统将请求转储到页面。当我使用Dusk测试页面时,我得到了一个截图,该截图显示了从未执行过的代码行:页面重新加载并显示验证错误。

我已经在表单中搜索了名称为“ query”的隐藏输入。它不存在。

我已经在控制器类和基类中搜索了用于测试“查询”输入的所有验证。我什么都没找到。

任何人都可以向我指出正确的方向,以弄清楚为什么使用serve命令可以使页面在自动测试环境中不起作用?

过去有人见过类似的错误吗?

Image shows the screen shot after Dusk clicks "Save" and submits the form. Test fails, because an unknown validation occurs before the App calls the controller.

2 个答案:

答案 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,因为它首先验证了请求,也将进入函数

希望有帮助