# How to create a test database with Laravel Sail

<!--
Title: How to create a test database with Laravel Sail
Tags: tutorial, beginners, laravel, sail, docker, database, testing
-->

# Introduction

I have worked on projects that required the production and testing database to be the same.

This could be because some features work in MariaDB, but not in SQLite. Or some bugs appear in MySQL, but not in PostgreSQL.

When you're working in a large project, **you need to know that the testing database works exactly like the one in production**.
You can't allow a bug to appear in production because the test database was different.

> Note: If the project is small, chances are you are fine using SQLite for testing.

Today, I'm going to guide you through setting up a testing database in your current database server, thanks to Laravel Sail.

---

## Before we start

This tutorial uses PostgreSQL as the database.
But the idea is the same for any other database: **create a separate database in your current database server**.

### Preface

### Requirements

- Laravel 9
- Laravel Sail

---

## Database setup

We will use the database server declared in the `docker-compose.yml` file.
In this case, PostgreSQL.

```yaml
services:
  pgsql:
    image: 'postgres:14'
```

First, enter PostgreSQL's CLI

```bash
sail psql
```

> Note: If you are using MySQL, you can use `sail mysql` instead.

Now, create a new database

```sql
CREATE DATABASE testing;
```

This database is separated from the default database that your application uses.

---

## PHPUnit configuration

Now, modify the `phpunit.xml` file to use the new database and database server.
Should end up similar to this:

```xml
<php>
    <env name="DB_CONNECTION" value="pgsql"/>
    <env name="DB_DATABASE" value="testing"/>
</php>
```

---

## Run the tests

Now, you can run the tests and see if they work.

```bash
sail test --parallel
```

It should look similar to this:

```bash
   PASS  Tests\Unit\ExampleTest
  ✓ example

  Tests:  1 passed
  Time:   0.7s
```

---

## End

That was it.
It's a one-time setup, that works like a charm.

<!-- INCLUDE -->

### Self-promotion

If you have found this useful, then you should follow me, I will be posting more interesting content! 🥰

- [GitHub](https://redirect.akbal.dev/github)
- [Twitter](https://redirect.akbal.dev/twitter)
- [Dev.to](https://redirect.akbal.dev/dev.to)

<!-- /INCLUDE -->

### Conclusion

Congratulations, today you have learned how to create a test database in Laravel Sail.
Without needing to modify the `docker-compose.yml` file or creating more services.

**Let me know if the tutorial was useful to you in the comments!**

