Mahmoud Alrashidi نشر 29 مارس 2021 أرسل تقرير نشر 29 مارس 2021 أقوم بإجراء اختبار ميزة وأحتاج إلى إنشاء بعض النماذج الوهمية في التابع 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, ]; } } اقتباس
0 سمير عبود نشر 29 مارس 2021 أرسل تقرير نشر 29 مارس 2021 إذا كنت تحاول إدراج قيم فارغة في قاعدة البيانات ، فعليك جعل الخانات تقبل ذلك: <?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 سينجح الإختبار. 1 اقتباس
السؤال
Mahmoud Alrashidi
أقوم بإجراء اختبار ميزة وأحتاج إلى إنشاء بعض النماذج الوهمية في التابع setUp. تكمن المشكلة أنه عند الاستعلام عن قاعدة البيانات ، يبدو أنها لا تزال فارغة كما ترى في الجزء التالي من التعليمات البرمجية:
ملف الإختبار:
ملف الإعدادات phpunit.xml:
ملف التهجير:
ملف ال Factory:
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.