Laravel Validation + Testing, зависит от поля другого поля - PullRequest
0 голосов
/ 09 октября 2018

Используя FormRequest, как мне подчинить правила одного поля значению другого поля.Я знаю, что мог бы использовать помощник request(), чтобы получить данные, как показано ниже, но тогда они не пройдут в моих тестах.

return [
    'deposit' => 'sometimes|int|min:100|max:' . request->get('price) * 0.15,
    'price' => 'required|int|min:1000',
];

Я копался в источнике класса FormRequest, гдеявляется функцией с именем `validationData ().Однако это возвращает пустой массив в моих тестах.

Вот как я тестирую мой FormRequest:

$request = new InvoiceRequest;
$validator = \Validator::make($data, $request->rules());
$results = $validator->errors()->has($key);

Поскольку request->get('price) всегда будет `нулем, поле депозита будетМаксимальное значение 0 в моих тестах, в то время как в контроллере он получит цену * 0,15, как и должно быть.

Есть ли способ добиться этого в тестах?

1 Ответ

0 голосов
/ 09 октября 2018

В настоящее время мое решение состоит в том, что я передаю дополнительные данные с помощью метода rules() следующим образом:

public function rules($price = null)
{
    $price = request()->get('price') ?? (int)$price;

    return [
        'deposit' => 'sometimes|int|min:100|max:' . round($price * 0.15),
        'price' => 'required|int|min:1000',
    ];
}

И в моем тесте я просто называю rules() с моей ценой.Этот обходной путь не идеален, но он делает свое дело.У меня есть дополнительные тесты, чтобы убедиться, что случаи использования request()->get('price') также работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...