@EVOSandru6

Как в laravel при тестировании регистрации заблокировать отправку уведомлений для почты и смс?

Добрый день!

Тестирую регистрацию.

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"/>
  • Вопрос задан
  • 169 просмотров
Решения вопроса 1
palkan_karabov
@palkan_karabov
PressF1
Например поставить условие
if(config('app.env') === 'production'){
   //
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы