Dusk не обрабатывает POST-запросы так же, как Laravel при тестировании отправки формы - PullRequest
0 голосов
/ 17 января 2019

При выполнении тестов в сумерках при отправке формы возникает ошибка проверки, которая гласит: «Поле запроса обязательно». Ошибка не возникает при тестировании страницы с ручным вводом.

Я добавил dd( $request ) в первую строку метода контроллера, который обрабатывает запрос POST. Когда я тестирую страницу вручную, система выводит запрос на страницу. Когда я тестирую страницу с Dusk, я получаю скриншот, который показывает, что строка кода никогда не выполнялась: страница перезагружается с ошибкой проверки.

Я искал в форме скрытый ввод с именем «запрос». Его не существует.

Я искал класс контроллера и базовые классы для любых проверок, которые проверяют ввод 'запроса'. Я не нашел ни одного.

Может ли кто-нибудь указать мне правильное направление, чтобы выяснить, почему страница не работает в среде автоматического тестирования, если она работает с помощью команды serve?

Кто-нибудь видел подобную ошибку в прошлом?

Image shows the screen shot after Dusk clicks

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Извините за поздний ответ

Например, мы можем принять Post Модель с PostController

функция вашего магазина может выглядеть как

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 вверху функции, потому что он сначала подтвердил запрос и он войдет в функцию

надеюсь, это поможет

0 голосов
/ 17 января 2019

Краткий ответ: Проверьте страницу, чтобы убедиться, что селектор захватывает правильную форму. В этом случае тестер забыл, что в строке меню существует форма. Тест нажимал кнопку в строке меню вместо основного содержимого страницы.

Оригинальный текст: Я думаю, иногда вам просто нужно уйти и вернуться к проблеме. Я был так сосредоточен на форме в центре страницы, что пропустил форму в строке меню, в которой есть ввод с именем «запрос».

Я нажимал не ту кнопку с моими командами Dusk, потому что мой селектор применялся к нескольким кнопкам в отдельных формах.

...