gpt4 book ai didi

php - 没有连接到数据库的 Laravel 模型工厂

转载 作者:行者123 更新时间:2023-11-28 19:41:33 25 4
gpt4 key购买 nike

我想在一些 PHPUnit 测试中使用 Laravel 的模型工厂。我唯一想做的就是创建一个模型实例而不将其保存到数据库中。

为什么模型工厂需要连接数据库?这些测试必须在没有配置数据库的 CI 环境中通过。

当我通过 new App\Model($dataArray) 手动创建模型时,测试通过并且不需要连接。

我在其他地方使用模型工厂,所以我想在那个测试中重用它,以避免代码重复。

我正在使用 MongoDB 和 jenssegers/laravel-mongodb图书馆,但我猜它没有关系 - 在纯粹的 Eloquent 中,例如MySQL数据库,问题是一样的。

在没有数据库的情况下工作的测试:

class ModelTransformerTest extends TestCase
{
public function testTransformMinimalModelData()
{
$data = [
'_id' => $faker->md5,
'email' => $faker->email,
];

$model = new App\Model($data);
// […];
}
}

我的模型工厂

$factory->defineAs(Model::class, 'base', function ($faker) {
return [
'_id' => $faker->md5,
'email' => $faker->email,
];
});

需要数据库连接的测试:

class ModelTransformerTest extends TestCase
{
public function testTransformMinimalModelData()
{
$model = factory(App\Model::class, 'base')->make();
// […];
}
}

完整堆栈跟踪:

Error: Class 'MongoDB\Driver\Manager' not found

app\vendor\mongodb\mongodb\src\Client.php:56
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Connection.php:147
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Connection.php:37
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\MongodbServiceProvider.php:27
app\vendor\illuminate\database\DatabaseManager.php:173
app\vendor\illuminate\database\DatabaseManager.php:68
app\vendor\illuminate\database\Eloquent\Model.php:3282
app\vendor\illuminate\database\Eloquent\Model.php:3248
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Eloquent\Model.php:523
app\vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Eloquent\Model.php:284
app\vendor\illuminate\database\Eloquent\Model.php:443
app\vendor\illuminate\database\Eloquent\Model.php:281
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:142
app\vendor\illuminate\database\Eloquent\Model.php:2286
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:143
app\vendor\illuminate\database\Eloquent\FactoryBuilder.php:106
app\tests\phpunit\Transformers\ModelTransformerTest.php:25
\php\pear\PHPUnit\TextUI\Command.php:176
\php\pear\PHPUnit\TextUI\Command.php:129

最佳答案

我不认为这是目前可能的。 make() 方法调用 newModelInstance() 尝试设置数据库连接。

您可以查看 source code自己。

关于php - 没有连接到数据库的 Laravel 模型工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38882594/

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