Hello
I am running phpunit test on my project and I have two issues:
- I can't seem to get DatabaseTransactions to work. Data is persisted and not rolled back. Test passes.
- I can't change the default database connection to another specific database.
Here are the relevant files:
- My test file:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class CategoryTest extends TestCase
{
use DatabaseTransactions;
protected $connectionsToTransact = ['mysql','mysql_testing'];
public function test_i_get_no_error_when_field_is_valid(){
$response = $this->post('/category', array(
'_token' => csrf_token(),
'title' => "titles",
));
$response->assertStatus(302);
$response->assertSessionMissing('errors');
}
the data title is persisted in the database. If i run php artisan migrate:refresh, the database is refreshed correctly.
- Controller
public function store(Request $request)
{
$rules = [
'title' => 'required|unique:category_translations|min:4|max:255|oneWord',
];
$this->validate($request, $rules);
$category = new Category;
$category -> title = $request -> title;
$category -> save();
return redirect()->back();
}
FOR MY SECOND ISSUE:
- my database.php file
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'mysql_testing' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE_TESTING', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
.
.
.
If i run php:artisan migrate --database mysql_testing , the command runs correctly.
- my phpunit.xml file
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="mysql_testing"/>
</php>
Full project if needed : https://github.com/Mushood/BlogSphere