اذهب إلى المحتوى
  • 0

لا يمكن إحضار النماذج من قاعدة البيانات في الاختبارات Laravel

Mahmoud Alrashidi

السؤال

أقوم بإجراء اختبار ميزة وأحتاج إلى إنشاء بعض النماذج الوهمية في التابع setUp. تكمن المشكلة أنه عند الاستعلام عن قاعدة البيانات ، يبدو أنها لا تزال فارغة كما ترى في الجزء التالي من التعليمات البرمجية:

ملف الإختبار:

<?php

namespace Tests\Feature;

use App\Models\Account;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ProcessOutreachTest extends TestCase
{
  use RefreshDatabase;

  protected function setUp(): void
  {
    parent::setUp();

    Account::factory()->count(50)->create();

    dd(Account::all()); // returns empty array
  }
}

ملف الإعدادات phpunit.xml:

<php>
    <server name="APP_ENV" value="testing"/>
    <server name="BCRYPT_ROUNDS" value="4"/>
    <server name="CACHE_DRIVER" value="array"/>
    <server name="DB_CONNECTION" value="sqlite"/>
    <server name="DB_DATABASE" value=":memory:"/>
    <server name="MAIL_DRIVER" value="array"/>
    <server name="QUEUE_CONNECTION" value="sync"/>
    <server name="SESSION_DRIVER" value="array"/>
  </php>

ملف التهجير:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAccounts extends Migration
{
  /**
     * Run the migrations.
     *
     * @return void
     */
  public function up()
  {
    Schema::create('accounts', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('email');
      $table->text('access_token');
      $table->timestamp('deleted_at');
      $table->timestamps();
    });
  }
}

ملف ال Factory:

<?php

namespace Database\Factories;

use App\Models\Account;
use Illuminate\Database\Eloquent\Factories\Factory;

class AccountFactory extends Factory
{
  /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
  protected $model = Account::class;

  /**
     * Define the model's default state.
     *
     * @return array
     */
  public function definition()
  {
    return [
      'access_token' => null,
      'email' => $this->faker->unique()->email,
      'deleted_at' => null,
    ];
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

إذا كنت تحاول إدراج قيم فارغة في قاعدة البيانات ، فعليك جعل الخانات تقبل ذلك:

<?php

Schema::create('accounts', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->string('email');
  $table->text('access_token')->nullable();
  $table->timestamp('deleted_at')->nullable();
  $table->timestamps();
});

في الواقع ، يجب أن تحصل على أخطاء عند إجراء الاختبار .إذا لم تكن الخانات nullable بهذا الشكل:

Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed:

وحتى تحصل على الخطأ جرب عمل التالي:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use App\Models\Account;
use Illuminate\Foundation\Testing\RefreshDatabase;

class TestingTest extends TestCase
{
    use RefreshDatabase;

    protected function setUp(): void
    {
        parent::setUp();
        Account::factory()->count(50)->create();
    }

    /** @test */
    public function check_for_collection_test()
    {
        dd(Account::all()); // returns Illuminate\Database\Eloquent\Collection; 
    }
}

إذا لم تكن الخانات nullable سيفشل الإختبار و يُعطي الخطأ أعلاه، أما إذا جعلت الخانات nullable سينجح الإختبار.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...