В моем приложении Laravel
есть следующий контроллер:
class ProjectController extends Controller {
...
public function index() {
$projects = Project::where('is_completed', false)
->orderBy('created_at', 'desc')
->withCount(['tasks' => function ($query) {
$query->where('is_completed', false);
}])->get();
return response()->json($projects);
}
public function store(Request $request) {
$validatedData = $request->validate([
'name' => 'required',
'description' => 'required',
]);
$project = Project::create([
'name' => $validatedData['name'],
'description' => $validatedData['description'],
]);
return response()->json('Project created!');
}
...
}
, на который ссылается следующий маршрут:
Route::get('projects', 'ProjectController@index');
Route::post('projects', 'ProjectController@store');
Кроме того, у меня есть следующий тестовый файл:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ProjectTest extends TestCase
{
public function testCreateProjects()
{
$response = $this->post(
'/api/projects',
[
'name' => 'Project 01 Title',
'description' => 'Project 01 Description',
]
);
$response = $this->post(
'/api/projects',
[
'name' => 'Project 02 Title',
'description' => 'Project 02 Description',
]
);
$response = $this->get('/api/projects');
$data = $response->json();
$this->assertSame(2, count($data));
}
}
В качестве живой базы данных я использую: MySQL
.Это необходимо.
В файле: /.env.testing
Я указал тестовую базу данных MySQL
, поэтому я не вносил изменений в действующую базу данных.
Есть несколько файлов, таких какследующие:
/database/migrations/<TIMESTAMP>_create_projects_table.php
, которые создают необходимые таблицы при выполнении некоторых из следующих команд:
$ php artisan:migrate
$ php artisan:migrate --env=testing
Я запускаю тестовые примеры с помощью команды:
$ phpunit
Приведенный выше тестовый пример работает хорошо только в том случае, если тестовая база данных пуста.
Тогда я хочу узнать, каковы лучшие практики для запуска тестовых случаев? Например, возможно:
- очищать каждую таблицу перед запуском контрольных примеров?
- использовать базу данных другого типа, например, базу данных
on-the-fly
, SQLite
и т. Д. (Но с учетом того, что действующая база данных должнабыть MySQL
).
Есть идеи по этому поводу?Я ищу лучшие практики.
Спасибо!