Comment puis-je exécuter un seul test à partir d'une suite?

86

J'ai cette classe de test ci-dessous, et je ne veux exécuter qu'un seul test, par exemple le "aboutPage". Des idées comment?

Voici comment je n'exécute que ce fichier:

codecept run tests/acceptance/VisitorCest.php

Mais maintenant, je veux exécuter un seul test à partir du fichier.

<?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
la source

Réponses:

140

Vous ajoutez simplement un deux-points et le nom de la fonction, comme ceci:

codecept run tests/acceptance/VisitorCest.php:myTestName

ou une version plus courte:

codecept run acceptance VisitorCest:myTestName

(Notez l'espace entre le nom de la suite et le nom du fichier.)

Tzook Bar Noy
la source
Juste une note. vous ne pouvez pas exécuter un seul test s'il s'agit d'un test unitaire (étendu de PHPUnit_Framework_TestCase ) car codeception n'a pas d' option de filtre (contrairement à phpunit )
coviex
3
codecept run unit / TestThatExtendsPHPUnit.php: testMethod fonctionne très bien pour moi.
mike.pj
4
Vous pouvez omettre l' .phpextension de nom de fichier, comme ceci:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
jlapoutre
myTestNamene doit pas non plus être le nom complet du test. Il exécutera tous les tests avec une correspondance partielle
andrewtweber
Comment puis-je aussi fonctionner avec des dépendances?
Diogo Alves le
39

c'est ce qui fonctionne:

codecept run {nom-suite} {nom-fichier} .php: {nom-fonction}

remarquez l'espace entre le nom de la suite et le nom du fichier

Mahmoud Zalt
la source
techniquement, vous avez la solution la plus générale. mais comme prouvé, la plupart des gens aiment voir des exemples à la place.
iGbanam
2
Vous n'avez pas besoin de la .phppièce.
tivnet
2
@tivnet Ceci n'est vrai que pour Codeception 2.x
conceptdeluxe
21

En plus de la réponse fournie par @Tzook Bar Noy, vous pouvez ajouter un suivi $lorsqu'il y a plusieurs tests qui commencent par le même nom . Prenons l'exemple suivant:

<?php

use \AcceptanceTester;

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

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

Où la commande suivante exécutera les deux tests:

codecept run tests/acceptance/VisitorCest.php:aboutPage

Cela n'exécutera que le premier:

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

Une manière plus appropriée de procéder consiste à attribuer une annotation de groupe au scénario de test en question. Ceci est préférable pour la raison suivante; Si vous avez deux cas de test par exemple dans la même classe VisitorCest;

public function aboutPage
public function aboutPage2

Exécution

codecept run tests/acceptance/VisitorCest.php:aboutPage

exécutera à la fois les cas de test VisitorCest: aboutPage et VisitorCest: aboutPage2.

Attribuer un groupe à un cas de test comme celui-ci

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

Et exécutez ce cas de test particulier comme ceci

codecept run -g aaa

Akongnwi Devert
la source
5

En plus des réponses précédentes, vous pouvez exécuter une ou plusieurs méthodes en regroupant par un nom donné:

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

Utilisez l'option -get le nom du groupe:

$ codecept run acceptance VisitorCest -g test-aboutPage
Igor Parra
la source
Je préférerais une manière légèrement différente, puisque vous pouvez tabuler dans ce cas et naviguer facilement vers un Cest souhaité, `codecept run tests / acceptation / VisitorCest -group test-aboutPage`
Stipe
2

c'est ce que je fais. php codecept.phar run unit UnitNameTest.php

Yann 叶
la source
Sans rapport avec la question posée
tivnet
1

Si vous utilisez PHP Yii2 Framework, vous ne pouvez exécuter qu'un seul test à l'aide de cette commande.

Assurez-vous que vous êtes dans le répertoire des tests.

cd /codeception/frontend

codecept run -vv acceptance HomeCept
Muhammad Shahzad
la source
Ce n'est pas lié à Yii2, mais au fait que a Ceptne contient qu'un seul test, mais Cestpeut contenir plusieurs tests - voir la question initiale
Oliver Hader
-1

Essayez-le phpunit --filter {TestMethodName} {FilePath}

atul_systematix
la source