#laravel #authentication #automated-tests #phpunit
#laravel #аутентификация #автоматизированные тесты #phpunit
Вопрос:
Я пишу автоматические тесты для устаревшего проекта laravel, 5.8.38. У меня есть этот метод тестирования.
public function testUserReceivesAnEmailWithAPasswordResetLink()
{
Notification::fake();
$user = factory(User::class)->create([
'email' => 'john@example.com',
]);
$this->post($this->passwordEmailPostRoute(), [
'email' => 'john@example.com',
]);
$this->assertNull($token = DB::table('password_resets')->first());
Notification::assertSentTo($user, ResetPassword::class, function ($notification, $channels) use ($token) {
return Hash::check($notification->token, $token->token) === true;
});
}
Это всегда завершается неудачей, потому что пользователь не может быть восстановлен. passwordEmailPostRoute()
Метод переходит к src/Illuminate/Auth/Passwords/PasswordBroker.php sendResetLink()
методу, в конечном итоге переходя в src/Illuminate/Auth/EloquentUserProvider.php
retrieveByCredentials()
метод at.
Это всегда возвращает значение null.
Я попытался сбросить данные и запросы, но все потерпело неудачу. Любые идеи приветствуются.
Комментарии:
1. попробуйте использовать: $this-> actingAs($user,’api’); перед $this-> post
2. @OMR это не решило мою проблему, но, похоже, действительно полезное дополнение, спасибо.
Ответ №1:
Похоже, это очень специфическая проблема, которую я вызвал для себя. Моя фабрика пользователей сгенерировала неправильные значения для поля подключения morph, что предотвратило возврат действительного пользовательского объекта. Мне пришлось сменить фабрику, и теперь проблема решена.