Заказчику понадобилось Unit-тестирование (причем тесты не сильно сложные) (причем именно unit, а не Feature-тесты --> обычно я Feature-тесты делаю в Postman).
Что я сделал --> настроил добавил три строчки в конец phpunit.xml
<env name="APP_ENV" value="testing"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
и в тестовый класс (Unit/ExampleTest класс) --> даже не стал создавать новый, добавил два метода:
Первый:
Второй:
public function testGetTotalSumReceipt() {
$data_publications = [
[
"title" => "Капитанская дочка",
"count" => 43,
"price" => 349,
],
[
"title" => "Старуха Изергиль",
"count" => 64,
"price" => 259,
],
[
"title" => "Горе от ума",
"count" => 76,
"price" => 149,
],
[
"title" => "Обломов",
"count" => 32,
"price" => 529,
],
[
"title" => "Война и мир",
"count" => 26,
"price" => 129,
]
];
$data_deliveries = [
[
'name' => 'Курьером',
],
[
'name' => 'Самовывоз',
]
];
DB::table('publications')->insert($data_publications);
DB::table('deliveries')->insert($data_deliveries);
$receipt = Receipt::create([
'code' => 'R-12345678',
'id_employee' => rand(1,10),
'id_client' => rand(1,10)
]);
Subscription::create([
'code' => AppHelper::generate_code('S',Subscription::class),
'id_publication' => 1, // 349
'count' => 2,
'id_receipt' => $receipt->id,
'start_at' => Carbon::now()->addWeeks(rand(1,3)),
'end_at' => Carbon::now()->addMonths(rand(1,4)),
]);
Subscription::create([
'code' => AppHelper::generate_code('S',Subscription::class),
'id_publication' => 2, // 259
'count' => 3,
'id_receipt' => $receipt->id,
'start_at' => Carbon::now()->addWeeks(rand(1,3)),
'end_at' => Carbon::now()->addMonths(rand(1,4)),
]);
Subscription::create([
'code' => AppHelper::generate_code('S',Subscription::class),
'id_publication' => 3, // 149
'count' => 4,
'id_receipt' => $receipt->id,
'start_at' => Carbon::now()->addWeeks(rand(1,3)),
'end_at' => Carbon::now()->addMonths(rand(1,4)),
]);
// 349 + 777 + 596 = 1722
$this->assertEquals(1722,$receipt->calculateFullSum());
}
Во втором методе я проверяю итоговую цену, которая сформировалась из подписок --> это как итоговая цена обычного товарного чека в супермаркете, сложенная из товаров.
При запуске тестов php artisan test высвечивается следующая ошибка:
Моя схема БД: