Laravel验证+测试,取决于另一个字段

时间:2018-10-08 23:32:48

标签: laravel

使用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)始终为“ null”,因此在我的测试中,存款字段的最大值为0,而在控制器中,它将得到应有的价格* 0.15。

  

在测试中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

现在,我的解决方案是像这样通过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')时的情况也可行。