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

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.)


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


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$

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


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

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


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.