php 在laravel 8中建立单元测试环境

vs3odd8k  于 2023-03-07  发布在  PHP
关注(0)|答案(3)|浏览(145)

所以我目前正在使用laravel(v8)框架开发一个更大的web应用程序。显然我有一个开发环境和一个生产环境,很快甚至还有一个过渡环境。因为有必要测试我的类(模型、控制器等),我已经写了一些单元测试。在这样做的时候我遇到了一个问题:我真的不想在实际的数据库上运行我的测试(甚至不在开发环境上),原因有很多,主要有两个:
1.资料完整性
1.当我使用单独的内存数据库进行测试时,它们会运行得更快。
所以我的问题是我如何设置我的laravel应用程序,使它使用内存数据库(sqlite)运行单元测试,并使用常规的mysql数据库进行常规的应用程序操作?

6za6bjd0

6za6bjd01#

您可以执行以下操作:

class TestCase extends Illuminate\Foundation\Testing\TestCase
{
    public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';
 
        //Load .env.testing environment
        $app->loadEnvironmentFrom('.env.testing');
 
        $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();
 
        return $app;
    }
}

参考文件:https://www.phplab.info/categories/laravel/how-to-specify-a-separate-database-for-unit-testing-on-laravel-5

ma8fv8wu

ma8fv8wu2#

您可以使用SQLite进行测试,只需在项目根目录下的phpunit.xml文件中添加以下行即可

<PHP>
    ...
    <server name="DB_CONNECTION" value="sqlite"/>
    <server name="DB_DATABASE" value=":memory:"/>
    ...
</php>

这将使用database.php文件中的SQLite连接进行迁移和数据库操作,当您处理测试时。
正常的应用程序将使用MySQL数据库连接。

f0brbegy

f0brbegy3#

这一点没有得到很好的记录,因为我越来越多地发现大量Laravel环境/基础架构的东西,这是特别困难的,因为缓存问题,缓慢的迁移时间和没有简单的方法来查看内存中的数据库是否实际上正在使用,这是一个困难和缓慢的过程来找出哪里出了问题。
经过一天的反复试验,我最终确认这套步骤是有效的。
1.复制.env文件的内容以创建名为.env.testing的文件。将APP_ENV的值更改为testing,并删除所有DB_条目。
1.编辑phpunit.xml文件以添加或取消注解以下行:

<server name="DB_CONNECTION" value="memory_testing"/>
<server name="DB_DATABASE" value=":memory:"/>

1.将以下数组添加到database.php中的connections

'connections' => [

   'memory_testing' => [
     'driver' => 'sqlite',
     'database' => ':memory:',
     'prefix' => '',
   ],

 ...

1.最后,运行php artisan config:clearphp artisan optimize:clear以清除配置缓存。
您的单元和特性测试现在应该使用内存中的SQLite数据库,而您的本地应该继续使用.env文件中配置的数据库。

相关问题