ฉันจะเรียกใช้การทดสอบเพียงชุดเดียวจากชุดได้อย่างไร


87

ฉันมีคลาสทดสอบนี้อยู่ด้านล่างและฉันต้องการเรียกใช้การทดสอบเพียงครั้งเดียวจากนั้นตัวอย่างเช่น "aboutPage" มีความคิดอย่างไร

นี่คือวิธีที่ฉันเรียกใช้เฉพาะไฟล์นี้:

codecept run tests/acceptance/VisitorCest.php

แต่ตอนนี้ฉันต้องการเรียกใช้การทดสอบเพียงครั้งเดียวจากไฟล์

<?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');
    }
}

คำตอบ:


142

คุณเพียงแค่ต่อท้ายเครื่องหมายจุดคู่และชื่อฟังก์ชันดังนี้:

codecept run tests/acceptance/VisitorCest.php:myTestName

หรือรุ่นที่สั้นกว่า:

codecept run acceptance VisitorCest:myTestName

(สังเกตช่องว่างระหว่างชื่อชุดและชื่อไฟล์)


เพียงแค่ทราบ คุณไม่สามารถเรียกใช้การทดสอบเดียวได้หากเป็นการทดสอบหน่วย (ขยายจากPHPUnit_Framework_TestCase ) เนื่องจากcodeceptionไม่มีตัวเลือกตัวกรอง (ไม่เหมือนphpunit )
coviex

3
codecept run unit / TestThatExtendsPHPUnit.php: testMethod ใช้งานได้ดีสำหรับฉัน
mike.pj

4
คุณสามารถละเว้น.phpนามสกุลไฟล์ได้ดังนี้codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
jlapoutre

1
myTestNameไม่จำเป็นต้องเป็นชื่อเต็มของการทดสอบ จะทำการทดสอบใด ๆ กับการแข่งขันบางส่วน
andrewtweber

ฉันจะรันด้วยการอ้างอิงด้วยได้อย่างไร
Diogo Alves

40

นี่คือสิ่งที่ได้ผล:

codecept เรียกใช้ {suite-name} {file-name} .php: {function-name}

สังเกตช่องว่างระหว่างชื่อชุดและชื่อไฟล์


ในทางเทคนิคคุณมีวิธีแก้ปัญหาทั่วไป แต่จากการพิสูจน์แล้วคนส่วนใหญ่ชอบดูตัวอย่างแทน
iGbanam

2
ไม่จำเป็นต้องมี.phpส่วน
tivnet

2
@tivnet นี่เป็นเรื่องจริงสำหรับ Codeception 2.x เท่านั้น
conceptdeluxe

22

นอกเหนือไปจากคำตอบที่ได้รับจาก@Tzook บาร์ Noyคุณสามารถเพิ่มต่อท้าย$เมื่อมีการทดสอบหลายที่เริ่มต้นด้วยชื่อเดียวกัน พิจารณาตัวอย่างต่อไปนี้:

<?php

use \AcceptanceTester;

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

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

โดยที่คำสั่งต่อไปนี้จะดำเนินการทดสอบทั้งสองแบบ:

codecept run tests/acceptance/VisitorCest.php:aboutPage

สิ่งนี้จะดำเนินการเฉพาะครั้งแรก:

codecept run tests/acceptance/VisitorCest.php:aboutPage$

10

วิธีที่เหมาะสมกว่าในการดำเนินการนี้คือการกำหนดคำอธิบายประกอบกลุ่มให้กับกรณีทดสอบที่เป็นปัญหา ควรใช้เหตุผลดังต่อไปนี้ หากคุณมีกรณีทดสอบสองกรณีตัวอย่างเช่นใน VisitorCest คลาสเดียวกัน

public function aboutPage
public function aboutPage2

กำลังดำเนินการ

codecept run tests/acceptance/VisitorCest.php:aboutPage

จะเรียกใช้ทั้งกรณีทดสอบ VisitorCest: aboutPage และ VisitorCest: aboutPage2

กำหนดกลุ่มให้กับกรณีทดสอบเช่นนี้

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

และดำเนินการกรณีทดสอบนี้โดยเฉพาะเช่นนี้

codecept run -g aaa


5

นอกเหนือจากคำตอบก่อนหน้านี้คุณสามารถเรียกใช้วิธีการหนึ่งหรือหลายวิธีโดยจัดกลุ่มตามชื่อที่กำหนด:

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

ใช้ตัวเลือก-gและชื่อของกลุ่ม:

$ codecept run acceptance VisitorCest -g test-aboutPage

ฉันต้องการวิธีที่แตกต่างออกไปเล็กน้อยเนื่องจากคุณสามารถแท็บในกรณีนั้นและไปที่ Cest ที่ต้องการได้อย่างง่ายดาย `codecept run testing / accept / VisitorCest -group test-aboutPage`
Stipe


1

หากคุณกำลังใช้ PHP Yii2 Frameworkคุณสามารถรันการทดสอบเพียงครั้งเดียวโดยใช้คำสั่งนี้

ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีการทดสอบ

cd /codeception/frontend

codecept run -vv acceptance HomeCept

นั่นไม่เกี่ยวข้องกับ Yii2 แต่เป็นความจริงที่ว่าการCeptทดสอบมีเพียงการทดสอบเดียว แต่Cestสามารถมีการทดสอบได้หลายแบบ - ดูคำถามเริ่มต้น
Oliver Hader

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.