Тестирование неудачной транзакцииPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Тестирование неудачной транзакции

Сообщение Anonymous »

Я пытаюсь написать тест для регистрации пользователя. Функция контроллера выглядит следующим образом: < /p>
public function store(StoreVolunteerRequest $request): RedirectResponse
{

try {
return DB::transaction(function () use ($request) {
$validated = $request->validated();
$user = User::create([
'firstname' => $validated['firstname'],
'lastname' => $validated['lastname'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
'orga_id' => null,
]);

$user->userInfo()->create([
'user_address' => $validated['address'],
'user_zip' => $validated['zip'],
'user_city' => $validated['city'],
]);

event((new Registered($user)));

$this->guard->login($user, $request->boolean('remember'));

return redirect()->route('tasks.index');
});
} catch (\Exception $e) {
Log::error('Volunteer registration failed', [
'error' => $e->getMessage(),
'trace' => $e->getTraceAsString(),
]);

return redirect()->back()->with('error', 'An error occurred while registering the user');
}
}

Я хочу проверить блок Catch . Чтобы достичь этого, я попытался издеваться над DB FACADE:
test('volunteer failed registration transaction', function () {
$this->withoutExceptionHandling();
Log::spy();

DB::partialMock()
->shouldReceive('transaction')
->once()
->andThrow(new \Exception('Transaction failed'));

$response = $this->post(route('register.store'), [
'firstname' => 'Test',
'lastname' => 'User',
'email' => 'test@example.com',
'password' => 'password',
'password_confirmation' => 'password',
'address' => 'street 12',
'zip' => '12345',
'city' => 'city',
]);

$response->assertRedirect();
$response->assertSessionHas('error', 'An error occurred while registering the user');

Log::shouldHaveReceived('error')
->once()
->with('Volunteer registration failed', [
Mockery::on(fn ($args) => isset($args['error']) &&
isset($args['trace'])
),
]
);
});
< /code>
Я получаю эту ошибку: < /p>
FAILED Tests\Feature\RegistrationTest > volunteer failed registration transaction ErrorException
Trying to access array offset on value of type null

at vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:366
362▕ * @return string
363▕ */
364▕ public function getDefaultConnection()
365▕ {
➜ 366▕ return $this->app['config']['database.default'];
367▕ }
368▕
369▕ /**
370▕ * Set the default connection name.
< /code>
Я тоже попытался издеваться над этой функцией: < /p>
DB::partialMock()
->shouldReceive('getDefaultConnection')
->andReturn($this->app['config']['database.default']);
< /code>
Но тогда я получаю это сообщение: < /p>
FAILED Tests\Feature\RegistrationTest > volunteer failed registration transaction ErrorException
Trying to access array offset on value of type null

at vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:202
198▕
199▕ // To get the database connection configuration, we will just pull each of the
200▕ // connection configurations and get the configurations for the given name.
201▕ // If the configuration doesn't exist, we'll throw an exception and bail.
➜ 202▕ $connections = $this->app['config']['database.connections'];
203▕
204▕ if (is_null($config = Arr::get($connections, $name))) {
205▕ throw new InvalidArgumentException("Database connection [{$name}] not configured.");
206▕ }

1 vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:168
2 vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:95


Подробнее здесь: https://stackoverflow.com/questions/794 ... ransaction
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»