¿Cómo puedo ejecutar solo una prueba de una suite?

86

Tengo esta clase de prueba a continuación y solo quiero ejecutar una prueba de ella, por ejemplo, "aboutPage". ¿Alguna idea de cómo?

Así es como ejecuto solo este archivo:

codecept run tests/acceptance/VisitorCest.php

Pero ahora quiero ejecutar solo una prueba del archivo.

<?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
fuente

Respuestas:

140

Simplemente agregue dos puntos y el nombre de la función, así:

codecept run tests/acceptance/VisitorCest.php:myTestName

o una versión más corta:

codecept run acceptance VisitorCest:myTestName

(Observe el espacio entre el nombre de la suite y el nombre del archivo).

Tzook Bar Noy
fuente
solo una nota. no puede ejecutar una sola prueba si es una prueba unitaria (extendida desde PHPUnit_Framework_TestCase ) ya que codeception no tiene opción de filtro (a diferencia de phpunit )
coviex
3
codecept run unit / TestThatExtendsPHPUnit.php: testMethod funciona bien para mí.
mike.pj
4
Puede omitir la .phpextensión del nombre de archivo, así:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
jlapoutre
myTestNametampoco tiene que ser el nombre completo de la prueba. Ejecutará cualquier prueba con una coincidencia parcial
andrewtweber
¿Cómo puedo ejecutar también con dependencias?
Diogo Alves
39

esto es lo que funciona:

codecept ejecutar {nombre-suite} {nombre-archivo} .php: {nombre-función}

observe el espacio entre el nombre de la suite y el nombre del archivo

Mahmoud Zalt
fuente
técnicamente tienes la solución más general. pero como se ha demostrado, a la mayoría de la gente le gusta ver ejemplos.
iGbanam
2
No necesita la .phppieza.
tivnet
2
@tivnet Esto solo es cierto para Codeception 2.x
conceptdeluxe
21

Además de la respuesta proporcionada por @Tzook Bar Noy , puede agregar un final $cuando hay varias pruebas que comienzan con el mismo nombre . Considere el siguiente ejemplo:

<?php

use \AcceptanceTester;

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

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

Donde el siguiente comando ejecutará ambas pruebas:

codecept run tests/acceptance/VisitorCest.php:aboutPage

Esto ejecutará solo el primero:

codecept run tests/acceptance/VisitorCest.php:aboutPage$
conceptodeluxe
fuente
10

Una forma más adecuada de hacer esto será asignar una anotación de grupo al caso de prueba en cuestión. Esto es preferible por la siguiente razón; Si tiene dos casos de prueba, por ejemplo, en la misma clase VisitorCest;

public function aboutPage
public function aboutPage2

Ejecutando

codecept run tests/acceptance/VisitorCest.php:aboutPage

ejecutará los casos de prueba VisitorCest: aboutPage y VisitorCest: aboutPage2.

Asignar un grupo a un caso de prueba como este

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

Y ejecute este caso de prueba en particular como este

codecept run -g aaa

Akongnwi Devert
fuente
5

Además de las respuestas anteriores, puede ejecutar uno o varios métodos agrupando por un nombre dado:

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

Utilice la opción -gy el nombre del grupo:

$ codecept run acceptance VisitorCest -g test-aboutPage
Igor Parra
fuente
Preferiría una forma ligeramente diferente, ya que puede tabular en ese caso y navegar fácilmente a un Cest deseado, `codecept ejecutar pruebas / aceptación / VisitorCest -group test-aboutPage`
Stipe
2

esto es lo que hago. php codecept.phar run unit UnitNameTest.php

Yann 叶
fuente
Irrelevante para la pregunta realizada
tivnet
1

Si lo está utilizando PHP Yii2 Framework, puede ejecutar solo una prueba con este comando.

Asegúrese de estar en el directorio de pruebas.

cd /codeception/frontend

codecept run -vv acceptance HomeCept
Muhammad Shahzad
fuente
Eso no está relacionado con Yii2, sino con el hecho de que a Ceptsolo contiene una prueba, pero Cestpuede contener varias pruebas; consulte la pregunta inicial
Oliver Hader
-1

Pruébelo phpunit --filter {TestMethodName} {FilePath}

atul_systematix
fuente