
فرایند Testing در فریمورک Yii
وقتی ما یک کلاس PHP را می نویسیم، گام به گام آن را Debug می کنیم یا با استفاده از دستورات die یا echo بررسی می کنیم که چگونه کار می کند.وقتی قصد داریم، یک web application را توسعه دهیم، داده های تستی را در فرم ها وارد می کنیم تا اطمینان حاصل کنیم که صفحه براساس آنچه که انتظار داشتیم کار می کند یا خیر. این فرایندِ تست می تواند خودکار باشد.
روش تست خودکار(Automatic test)، برای تستِ پروژه هایِ بزرگی که ویژگی های زیر را دارا می باشند مناسب است :
- پیچیده و بزرگ هستند
- دائماً در حال رشد هستند
- هر گونه قصور و خرابی در پروژه از لحاظ هزینه، بسیار گران تمام می شود
اگر پروژه شما پیچیده نیست و نسبتاً ساده یا فقط یک پروژه کوچک است، تستِ خودکار برای آن گزینه ی مناسبی نخواهد بود.
آماده سازی برای تست
مرحله 1 - فریمورک Codeception را نصب کنید و کد زیر را اجرا کنید.
composer global require "codeception/codeception = 2.0.*"
composer global require "codeception/specify = *"
composer global require "codeception/verify = *"
مرحله 2 – دستور زیر را اجرا کنید.
composer global status
در نتیجه ی اجرای کد بالا، خروجی به صورت “Changed current directory to <directory>” می باشد.شما باید '<directory>/vendor/bin' را به مسیر یا Path متغیرتان اضافه کنید.در مورد مثال ما کد زیر را اجرا کنید.
export PATH = $PATH:~/.composer/vendor/bin
مرحله 3 - یک پایگاه داده جدید به نام 'yii2_basic_tests'بسازید.
مرحله 4 - داخل دایرکتوری tests کد زیر را اجرا کنید.
codeception/bin/yii migrate
پیکربندی پایگاه داده را می توانید در فایل tests/codeception/config/config.php انجام دهید.
مرحله 5 - از طریق کد زیر test suite بسازید.
codecept build
Fixtureها
هدف اصلی fixtureها، ایجاد محیط برای حالات ناشناخته است تا آزمایشات شما، به نحوی پیش بینی شده انجام شوند.فریمورک Yii یک fixture framework را مهیا کرده است. مفهوم کلیدی Yii fixture framework، شیء fixture است که یک جنبه خاص از محیط test را نشان می دهد. شی fixture یک نمونه از کلاس yii\test\Fixtureاست.
برای تعریف یک fixture، شما باید یک کلاس جدید ایجاد کنید و آن را از کلاس yii\test\Fixture یا yii\test\ActiveFixture گسترش دهید یا اصطلاحا extend کنید. اولی برای fixture های همه منظوره مناسب تر است، در حالی که دومی به طور خاص برای کار با پایگاه داده و ActiveRecord طراحی شده است.
Unit tests
Unit test ها به شما کمک می کند تا توابع تان را تست کنید. به عنوان مثال، توابع مدل یا component classها
مرحله 1 - یک fixture جدید در فایلی به نام ExampleFixture.php در دایرکتوری tests/codeception/fixtures ایجاد کنید.
<?php
namespace app\tests\codeception\fixtures;
use yii\test\ActiveFixture;
class ExampleFixture extends ActiveFixture {
public $modelClass = ‘app⊨’MyUser';
}
?>
مرحله 2 - سپس یک فایل test جدید به نام ExampleTest.php در پوشه tests/codeception/unit/models ایجاد کنید.
<?php
namespace tests\codeception\unit\models;
use app\models\MyUser;
use yii\codeception\TestCase;
class ExampleTest extends TestCase {
public function testCreateMyUser() {
$m = new MyUser();
$m->name = "myuser";
$m->email = "myser@email.com";
$this->assertTrue($m->save());
}
public function testUpdateMyUser() {
$m = new MyUser();
$m->name = "myuser2";
$m->email = "myser2@email.com";
$this->assertTrue($m->save());
$this->assertEquals("myuser2", $m->name);
}
public function testDeleteMyUser() {
$m = MyUser::findOne(['name' => 'myuser2']);
$this->assertNotNull($m);
MyUser::deleteAll(['name' => $m->name]);
$m = MyUser::findOne(['name' => 'myuser2']);
$this->assertNull($m);
}
}
?>
در کد بالا، ما سه test تعریف کردیم :
- testCreateMyUser
- testUpdateMyUser
- testDeleteMyUser
ما یک user جدید ایجاد کردیم، نام آن را آپدیت کردیم و تلاش کردیم آن را حذف کنیم. ما مدل MyUser رادر پایگاه داده yii2_basic_tests مدیریت نمودیم که یک نسخه کامل از DB اصلی ما است.
مرحله 3 - برای شروع testها، به پوشه tests بروید و کد زیر را اجرا کنید.
codecept run unit models/ExampleTest
باید تمام testها گذرانده شود. آنچه که مشاهده خواهید نمود مطابق با تصویر زیر می باشد.
Functional Testها
Functional Testها به شما کمک می کند در :
- تست برنامه با استفاده از شبیه ساز مرورگر
- بررسی می کند که این تابع به درستی کار می کند یا خیر
- با پایگاه داده ارتباط برقرار می کند
- داده ها را به اسکریپت های سمت سرور ارسال می کند
داخل پوشه یtests دستور زیر را اجرا کنید :
generate:cept functional AboutPageCept
دستور بالا فایل AboutPageCept.php را در پوشه tests/codeception/functional ایجاد می کند. در این functional test، ما قصد داریم بررسی کنیم که آیا صفحه about وجود دارد.
مرحله 1 - فایل AboutPageCept.phpp را ویرایش کنید.
<?php
$I = new FunctionalTester($scenario);
$I->wantTo('perform actions and see result');
$I->amOnPage('site/about');
$I->see('about');
$I->dontSee('apple');
?>
در کد داده شده فوق، ما بررسی کردیم که آیا در صفحه ی about هستیم یا خیر. بدیهی است، ما باید کلمه 'about' را در صفحه ببینیم.
مرحله 2 – دستور زیر را اجرا کنید.
run functional AboutPageCept
آنچه که مشاهده خواهید کرد مطابق با تصویر زیر می باشد.
این فصل در یک نگاه:
…
سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…این فصل در یک نگاه:
…
پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…