Wie kann ich nur einen Test in einer Suite ausführen?


84

Ich habe diese Testklasse unten und möchte nur einen Test davon ausführen, zum Beispiel die "aboutPage". Irgendwelche Ideen wie?

So führe ich nur diese Datei aus:

codecept run tests/acceptance/VisitorCest.php

Aber jetzt möchte ich nur einen Test aus der Datei ausführen.

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

Antworten:


138

Sie fügen einfach einen Doppelpunkt und den Funktionsnamen wie folgt hinzu:

codecept run tests/acceptance/VisitorCest.php:myTestName

oder eine kürzere Version:

codecept run acceptance VisitorCest:myTestName

(Beachten Sie den Abstand zwischen dem Suite-Namen und dem Dateinamen.)


nur eine Notiz. Sie können nicht einzelne Prüfung durchführen , wenn es sich um eine Einheit Test (extended von PHPUnit_Framework_TestCase ) als codeception hat keine Filteroption ( im Gegensatz zu phpunit )
coviex

3
codecept run unit / TestThatExtendsPHPUnit.php: testMethod funktioniert für mich einwandfrei.
Mike.pj

3
Sie können die .phpDateinamenerweiterung wie codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
folgt

myTestNamemuss auch nicht der vollständige Testname sein. Es werden alle Tests mit einem
Teilmatch ausgeführt

Wie kann ich auch mit Abhängigkeiten arbeiten?
Diogo Alves

38

das ist was funktioniert:

Codecept run {Suite-Name} {Dateiname} .php: {Funktionsname}

Beachten Sie den Abstand zwischen dem Suite-Namen und dem Dateinamen


technisch haben Sie die allgemeinere Lösung. Aber wie bewiesen, sehen die meisten Leute stattdessen gerne Beispiele.
iGbanam

2
Benötige das .phpTeil nicht.
Tivnet

2
@tivnet Dies gilt nur für Codeception 2.x
conceptdeluxe

18

Zusätzlich zu der Antwort von @Tzook Bar Noy können Sie ein Trailing hinzufügen, $wenn mehrere Tests mit demselben Namen beginnen . Betrachten Sie das folgende Beispiel:

<?php

use \AcceptanceTester;

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

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

Wobei der folgende Befehl beide Tests ausführt:

codecept run tests/acceptance/VisitorCest.php:aboutPage

Dies wird nur das erste ausführen:

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

9

Eine geeignetere Methode hierfür besteht darin, dem betreffenden Testfall eine Gruppenanmerkung zuzuweisen. Dies ist aus folgendem Grund vorzuziehen: Wenn Sie beispielsweise zwei Testfälle in derselben Klasse haben VisitorCest;

public function aboutPage
public function aboutPage2

Ausführen

codecept run tests/acceptance/VisitorCest.php:aboutPage

führt die Testfälle VisitorCest: aboutPage und VisitorCest: aboutPage2 aus.

Ordnen Sie einem Testfall wie diesem eine Gruppe zu

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

Und führen Sie diesen speziellen Testfall so aus

codecept run -g aaa


5

Zusätzlich zu den vorherigen Antworten können Sie eine oder mehrere Methoden ausführen, indem Sie nach einem bestimmten Namen gruppieren:

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

Verwenden Sie die Option -gund den Namen der Gruppe:

$ codecept run acceptance VisitorCest -g test-aboutPage

Ich würde eine etwas andere Art bevorzugen, da Sie in diesem Fall eine Registerkarte erstellen und einfach zu einer gewünschten Cest navigieren können: "Codecept Run Tests / Acceptance / VisitorCest-Group Test-AboutPage"
Stipe

2

das ist was ich mache. php codecept.phar run unit UnitNameTest.php


Unabhängig von der gestellten Frage
tivnet

1

Wenn Sie verwenden PHP Yii2 Framework, können Sie mit diesem Befehl nur einen Test ausführen.

Stellen Sie sicher, dass Sie sich im Testverzeichnis befinden.

cd /codeception/frontend

codecept run -vv acceptance HomeCept

Das hängt nicht mit Yii2 zusammen, sondern mit der Tatsache, dass a Ceptnur einen Test enthält, aber Cestmehrere Tests enthalten kann - siehe die erste Frage
Oliver Hader

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.