Bazı PHPUnit testlerinde Laravel'in Model Fabrikasını kullanmak istiyorum. Yapmak istediğim tek şey, bir Model örneğini veritabanına kaydetmeden yapmak.Laravel Model Fabrikası veritabanına bağlantı olmadan
Model Fabrikası neden veritabanına bağlı? Bu testler, yapılandırılmış veritabanı olmadan CI ortamından geçmelidir.
Model'i new App\Model($dataArray)
ile manuel olarak oluşturduğumda, sınamalar başarılı olur ve bağlantı gerekli değildir.
Model Factory'yi başka yerlerde kullanıyorum, bu nedenle kod yinelemesinden kaçınmak için bu sınamalarda yeniden kullanmak istiyorum.
MongoDB ve jenssegers/laravel-mongodb kütüphanesini kullanıyorum, ama sanırım bir önemi yok - saf Eloquent ve ör. MySQL veritabanı, sorun aynı olurdu.
class ModelTransformerTest extends TestCase
{
public function testTransformMinimalModelData()
{
$data = [
'_id' => $faker->md5,
'email' => $faker->email,
];
$model = new App\Model($data);
// […];
}
}
Benim Modeli Fabrikası
$factory->defineAs(Model::class, 'base', function ($faker) {
return [
'_id' => $faker->md5,
'email' => $faker->email,
];
});
Testi veritabanı bağlantısı ihtiyacı:
class ModelTransformerTest extends TestCase
{
public function testTransformMinimalModelData()
{
$model = factory(App\Model::class, 'base')->make();
// […];
}
}
Tam yığın takibi:
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
veritabanı olmadan çalışır
Testi
için
. Laravel, bellekte bir SQLite DB oluşturma seçeneği sunar. Yani teknik olarak bir veritabanına sahip ama kısa sürede testler bellekten kaldırılır DB tam olarak vb MongoDB veya MySQL doldurulmaz – user3425867