Как проверить пользовательское правило проверки в Laravel 5.8 - PullRequest
0 голосов
/ 31 марта 2019

Я хотел бы написать тест для моих пользовательских правил.

мой пример выглядит следующим образом.Я проверяю, дает ли пользователь правильный текущий пароль.

мое пользовательское правило:

public function passes($attribute, $value)
{
    return Hash::check($value, auth()->user()->password);
}

public function message()
{
    return 'Your current password is incorrect.';
}

и тест для этого правила:

class CurrentPasswordTest extends TestCase
{
   use WithFaker, RefreshDatabase;

   /** @test */
   public function current_password_must_be_valid()
   {  
      $rule = new CurrentPassword();
      $user = factory(User::class)->create(['password' => '1234']);

      $this->assertTrue($rule->passes('current_password','1234'), $user->password);
   }
}

но яполучаю сообщение об ошибке:

Tests \ Unit \ CurrentPasswordTest :: current_password_must_be_valid ErrorException: Попытка получить свойство 'пароль' не-объекта

что я делаюнеправильно в этом примере?

1 Ответ

0 голосов
/ 31 марта 2019

Прежде чем использовать метод passes(), необходимо войти в систему, иначе auth()->user() будет нулевым.Вы можете сделать это, используя метод be($user), подобный следующему:

/** @test */
public function current_password_must_be_valid()
{  
  $rule = new CurrentPassword();
  $user = factory(User::class)->create(['password' => '1234']);
  $this->be($user);
  $this->assertTrue($rule->passes('current_password','1234'), $user->password);
}

Было бы также целесообразно принять меры против значений null в вашем методе passes(), чтобы избежать ошибок.Если пользователь не вошел в систему, вероятно, он должен просто вернуть false.

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