【问题标题】:Laravel validation testing using data provider使用数据提供者的 Laravel 验证测试
【发布时间】:2020-05-01 18:48:24
【问题描述】:

我有 laravel 规则验证,我想用一种方法和 dataProvider 使用 phpunit 测试它所有的规则

例如我有规则required|string|max:255我想测试requiredstring andmax:255`规则而不单独编写测试方法

但我只能为 required 规则执行此操作,我只想测试第二个规则,例如 digit_between 的身份字段,但 first_name 字段没有 digit_between 但是 string

  1. 这里是我的示例规则代码
    {
     return [
      'identity_number' => 'required|digits_between:1,255|unique:borrowers',
      'first_name'      => 'required|string|max:255',
      'last_name'       => 'required|string|max:255',
      'birthdate'       => 'required|date',
     ];
    }

2.测试代码:

    /**
     * Test store validation.
     *
     * @return void
     *
     * @group user
     * @dataProvider requiredStoreValidationProvider
     */
    public function testStoreValidation($formInput, $formInputValue)
    {
        $response = $this->actingAs($this->user)
            ->post(route('borrower.store'), [
                $formInput => $formInputValue,
            ]);

        $response->assertSessionHasErrorsIn('validation', $formInput);
    }

    /**
     * Required store data validation provider.
     *
     * @return \string[][]
     */
    public function requiredStoreValidationProvider()
    {
        return [
            ['identity_number', ''],
            ['first_name', ''],
            ['last_name', ''],
            ['birthdate', ''],
        ];
    }

【问题讨论】:

    标签: php laravel validation testing phpunit


    【解决方案1】:

    每个索引都是一个测试场景,所以第一个场景是测试所需的验证, 第二种情况是digits_between:1,255,我们为identity_number设置了256,因为你已经定义了一个范围号,其余的如你所见。

    /**
         * Required store data validation provider.
         *
         * @return \string[][]
         */
        public function requiredStoreValidationProvider()
        {
            return [
                ['identity_number', ''],
                ['identity_number', 256],
                ['first_name', ''],
                ['first_name', 123],
                ['first_name', str_random(256)],
                ['last_name', ''],
                ['last_name', 123],
                ['last_name', str_random(256)],
                ['birthdate', ''],
            ];
        }
    
    

    【讨论】:

    • 我已经尝试过它和它的工作......但我也可以断言在 laravel 错误会话中是否有带有翻译消息的键?谢谢:-D
    • 您可以将 $key, $value 传递给 $this->assertSessionHasErrors('validation', ['identity_number'=>'Your translate message']);
    • 但如果我使用validation.php 翻译文件,而该文件中有:attribute :max :min 和其他参数,它是有效的?
    • 如果你以某种方式解析它就会起作用,我的意思是将 :attribute 替换为字段名称,max 和 min 也是。然后,您将收到一条消息,您可以针对响应断言。我认为您可以搜索 laravel 如何解析验证消息并使用它,否则您可以编写解析器。
    • 我知道 laravel 验证如何替换参数..我想我可以在不替换属性的情况下自动传递它...但是不能..必须手动替换它再次感谢帮助我
    猜你喜欢
    • 2023-03-02
    • 2021-11-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多