gpt4 book ai didi

laravel - 如何正确更改测试环境变量 - Codeception 和 Laravel 5.1

转载 作者:行者123 更新时间:2023-12-04 22:11:22 27 4
gpt4 key购买 nike

我正在尝试使用 sqlite db 进行测试,因为我不想接触我的实际数据库:

在我的 unit.suite.yml 文件中:

class_name: UnitTester
modules:
enabled: [Asserts, UnitHelper]
config:
Db:
dsn: 'sqlite:app/tests/_data/testdb.sqlite'
user: ''
password: ''
dump: app/tests/_data/dump.sql

在我的 TestCase.php 文件中,我有一个函数可以重置、迁移和播种数据库以进行测试:
        Artisan::call('migrate:reset');
Artisan::call('migrate');
Artisan::call('db:seed');

我还在 app/config/testing/database.php 中添加了 sqlite 设置:
<?php
// Codeception testing environment uses SQLITE

return [

'default' => 'sqlite',

'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => 'app/tests/_data/testdb.sqlite',
'prefix' => ''
],
]
];

我可以验证正在读取 database.php 文件,但仍然有一些东西阻止了 sqlite 的使用,而且我仍然最终使用了我的真实数据库 (MySQL)。如何强制 Laravel/Codeception 使用我的测试数据库?

最佳答案

复制 part of my blog here ...

经过一番搜索,我们假设在 phpunit.xml 中包含变量。有一些预先包含的

<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"/>
</php>

但是我想使用 .env 文件。所以总有办法:)

您现在需要做的就是使用适当的 env 文件调用应用程序 loadEnvironmentFrom($file)。因为我只需要它进行测试,所以我添加了 .env.testing.example 和 .env.testing (从 gi​​t 中排除)。我在/tests/TestCase.php 中添加了对方法的调用
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';

//THIS IS IT :)
$app->loadEnvironmentFrom('.env.testing');

$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();

return $app;
}

关于laravel - 如何正确更改测试环境变量 - Codeception 和 Laravel 5.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com