0
I am creating unit tests on my system using Sqlite (in memory), but whenever I try to run them, they return the error:
1) Tests\Unit\UserTest::testUserCreate
Symfony\Component\Console\Exception\CommandNotFoundException: The command "migrate:fresh" does not exist.
/var/www/html/vendor/laravel/framework/src/Illuminate/Console/Application.php:178
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:264
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php:136
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php:220
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithConsole.php:56
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseMigrations.php:16
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:109
/var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:72
/var/www/html/tests/TestCase.php:24
The classes used to do the tests are like this:
Usertest.php
<?php
namespace Tests\Unit;
use App\Domains\UserDomain;
use App\Models\User;
use Tests\TestCase;
class UserTest extends TestCase
{
private $userDomain;
public function __construct()
{
parent::setUp();
$this->userDomain = app('App\Domains\UserDomain');
}
public function testUserCreate()
{
$userFactory = factory(User::class)->make();
$userData = [
'name' => $userFactory->name,
'email' => $userFactory->email,
'password' => '123456',
];
$user = $this->userDomain->create($userData);
$this->assertInstanceOf(User::class, $userFactory);
$this->assertEquals($userData['name'], $userFactory->name);
$this->assertEquals($userData['email'], $userFactory->email);
$this->assertTrue(!empty($user->password));
}
}
OBS: "Userdomain" is the layer responsible for user-related business rules. The "create" function creates the user’s model and inserts it into the database (basically a User::create(['name' => name, 'email' => email, 'password' => password])
);
Testcase.php
<?php
namespace Tests;
use Faker\Factory as Faker;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
/**
* Class TestCase
* @package Tests
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
*/
abstract class TestCase extends BaseTestCase
{
use CreatesApplication, DatabaseTransactions, DatabaseMigrations;
protected $faker;
/**
* Set up the test
*/
public function setUp(): void
{
parent::setUp();
$this->faker = Faker::create();
}
/**
* Reset the migrations
*/
public function tearDown(): void
{
$this->artisan('migrate:reset');
parent::tearDown();
}
}
phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing" force="true"/>
<env name="CACHE_DRIVER" value="array" force="true"/>
<env name="SESSION_DRIVER" value="array" force="true"/>
<env name="QUEUE_DRIVER" value="sync" force="true"/>
<env name="DB_CONNECTION" value="sqlite" force="true"/>
<env name="DB_DATABASE" value=":memory:" force="true"/>
<env name="API_DEBUG" value="false" force="true"/>
<env name="MAIL_DRIVER" value="log" force="true"/>
<ini name="memory_limit" value="512M" />
</php>
</phpunit>
I made this change, but I still have problems: 1) Tests Unit Usertest::testUserCreate Reflectionexception: Class config does not exist (I could not put the full stack trace by comment character limitation)
– Matheus de Melo .F