Я пытаюсь написать тест для регистрации пользователя. Функция контроллера выглядит следующим образом: < /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
Тестирование неудачной транзакции ⇐ Php
Кемеровские программисты php общаются здесь
1738286199
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79401290/testing-a-failed-transaction[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия