Добрый день!
Тестирую регистрацию.
public function testSuccess(): void
{
$this->withoutMiddleware();
$user = factory(User::class, 'customer')->make(['phone' => '+7 (999) 000-0002']);
$response = $this->post(route('register'), [
'name' => $user->name,
'email' => $user->email,
'password' => 'secret1234',
'password_confirmation' => 'secret1234',
'department_id' => $voronezh = 40,
'phone' => $user->phone
]);
$newUser = User::where('email', $user->email);
self::assertEquals($newUser->email, $user->email);
$response
->assertStatus(302)
->assertRedirect(route('verify.phone'))
->assertSessionHas('success', __('messages', 'you_need_to_confirm_your_account_please_check_your_email_or_phone'));
}
В сервисе идет отправка смс и email уведомлений.
Для СМС у меня определен провайдер:
class SmsServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(SmsSender::class, function (Application $app) {
$config = $app->make('config')->get('sms');
switch ($config['driver']) {
case 'smsc.ru':
$params = $config['drivers']['smsc.ru'];
return new SmscRu($params['login'], $params['password'], $params['url']);
break;
case 'array':
return new SmsMock();
break;
default:
throw new \InvalidArgumentException('Undefined SMS driver ' . $config['driver']);
}
});
}
}
Как мне из теста можно переопределить реализацию интерфейса
SmsSender?
И каким образом можно замокать почту?
Тут у меня все из коробки.
Никаких провайдеров я не создавал.
Только в
.env определил параметры подключения.
Отправку осуществляю в сервисах подобным образом:
$this->mailer->to($user->email)->queue(new VerifyMail($user));
По какой-то причине следующее дополнение в файл результатов не дало:
/phpunit.xml
<env name="MAIL_DRIVER" value="array" force="true"/>
<env name="SMS_DRIVER" value="array" force="true"/>