PHPUnitテストでLaravelのModel Factoryを使用したいと思います。私がしたいのは、Modelインスタンスをデータベースに保存せずに作ることだけです。データベースに接続していないLaravel Model Factory
モデルファクトリがデータベースに接続する必要があるのはなぜですか?これらのテストは、構成されたデータベースなしでCI環境を通過する必要があります。
new App\Model($dataArray)
でモデルを手動で作成すると、テストは合格し、接続は不要です。
私は他の場所でModel Factoryを使用していますので、コードの重複を避けるために、そのテストで再利用したいと思います。
私は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
については
。 LaravelはメモリにSQLite DBを作成するオプションを提供します。あなたは技術的にデータベースを持っていますが、あなたのMongoDBやMySQLなどを埋めることはありません。テストが完了すると、DBはメモリから削除されます – user3425867