Bagaimana saya dapat menjalankan hanya satu pengujian dari sebuah rangkaian?

87

Saya memiliki kelas pengujian di bawah ini, dan saya ingin menjalankan hanya satu pengujian darinya, misalnya "aboutPage". Ada ide bagaimana?

Beginilah cara saya menjalankan file ini:

codecept run tests/acceptance/VisitorCest.php

Tapi sekarang saya hanya ingin menjalankan satu tes dari file tersebut.

<?php
use \AcceptanceTester;

class VisitorCest
{
    public function _before(){}
    public function _after(){}

    public function aboutPage(AcceptanceTester $I)
    {
        $I->wantTo('check about page');
    }

    public function contactPage(AcceptanceTester $I)
    { 
        $I->wantTo('check contact page');
    }
}
Tzook Bar Noy
sumber

Jawaban:

142

Anda cukup menambahkan titik dua dan nama fungsi, seperti ini:

codecept run tests/acceptance/VisitorCest.php:myTestName

atau versi yang lebih pendek:

codecept run acceptance VisitorCest:myTestName

(Perhatikan ruang antara nama-suite dan nama-file.)

Tzook Bar Noy
sumber
hanya sebuah catatan. Anda tidak dapat menjalankan satu pengujian jika itu adalah pengujian unit (diperpanjang dari PHPUnit_Framework_TestCase ) karena codeception tidak memiliki opsi filter (tidak seperti phpunit )
coviex
3
codecept run unit / TestThatExtendsPHPUnit.php: testMethod bekerja dengan baik untuk saya.
mike.pj
4
Anda dapat menghilangkan .phpekstensi nama file, seperti ini:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
jlapoutre
1
myTestNametidak harus nama tes lengkap juga. Ini akan menjalankan tes apa pun dengan kecocokan parsial
andrewtweber
Bagaimana saya bisa menjalankan dengan dependensi juga?
Diogo Alves
40

inilah yang berhasil:

codecept jalankan {suite-name} {file-name} .php: {function-name}

perhatikan spasi antara suite-name dan file-name

Mahmoud Zalt
sumber
secara teknis Anda memiliki solusi yang lebih umum. tapi terbukti, kebanyakan orang lebih suka melihat contoh.
iGbanam
2
Tidak butuh .phpbagian.
tivnet
2
@tivnet Ini hanya berlaku untuk Codeception 2.x
conceptdeluxe
22

Selain jawaban yang diberikan oleh @Tzook Bar Noy, Anda dapat menambahkan trailing $jika ada beberapa tes yang dimulai dengan nama yang sama . Perhatikan contoh berikut:

<?php

use \AcceptanceTester;

class VisitorCest
{
    public function aboutPage(AcceptanceTester $I)
    {
    }

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

Di mana perintah berikut akan menjalankan kedua tes:

codecept run tests/acceptance/VisitorCest.php:aboutPage

Ini hanya akan mengeksekusi yang pertama:

codecept run tests/acceptance/VisitorCest.php:aboutPage$
conceptdeluxe
sumber
10

Cara yang lebih tepat untuk melakukan ini adalah dengan menetapkan anotasi grup untuk kasus uji yang dimaksud. Ini lebih disukai karena alasan berikut; Jika Anda memiliki dua kasus uji misalnya di kelas yang sama VisitorCest;

public function aboutPage
public function aboutPage2

Mengeksekusi

codecept run tests/acceptance/VisitorCest.php:aboutPage

akan menjalankan kasus pengujian VisitorCest: aboutPage dan VisitorCest: aboutPage2.

Tetapkan grup untuk kasus uji seperti ini

/**
 * @group aaa
 */
public function aboutPage(AcceptanceTester $I)
{
}

Dan jalankan kasus uji khusus ini seperti ini

codecept run -g aaa

Akongnwi Devert
sumber
5

Selain jawaban sebelumnya, Anda dapat menjalankan satu atau beberapa metode dengan mengelompokkan berdasarkan nama yang diberikan:

/**
 * @group test-aboutPage
 */
public function aboutPage(AcceptanceTester $I)
{
    $I->wantTo('check about page');
}

Gunakan opsi -gdan nama grup:

$ codecept run acceptance VisitorCest -g test-aboutPage
Igor Parra
sumber
Saya lebih suka cara yang sedikit berbeda, karena Anda dapat melakukan tab dalam kasus itu dan dengan mudah menavigasi ke Cest yang diinginkan, `codecept run tes / penerimaan / VisitorCest -group test-aboutPage`
Stipe
2

Inilah yang saya lakukan. php codecept.phar run unit UnitNameTest.php

Yann 叶
sumber
Tidak relevan dengan pertanyaan yang diajukan
tivnet
1

Jika Anda menggunakan PHP Yii2 Framework, maka Anda hanya dapat menjalankan satu pengujian menggunakan perintah ini.

Pastikan Anda berada di direktori tes.

cd /codeception/frontend

codecept run -vv acceptance HomeCept
Muhammad Shahzad
sumber
Itu tidak terkait dengan Yii2, tetapi dengan fakta bahwa sebuah Ceptpengujian hanya berisi satu, tetapi sebuah Cestdapat berisi beberapa pengujian - lihat pertanyaan awal
Oliver Hader
-1

Cobalah phpunit --filter {TestMethodName} {FilePath}

atul_systematix
sumber