Como posso executar apenas um teste de uma suíte?

86

Tenho essa classe de teste abaixo e desejo executar apenas um teste a partir dela, por exemplo, "aboutPage". Alguma ideia de como?

É assim que executo apenas este arquivo:

codecept run tests/acceptance/VisitorCest.php

Mas agora quero executar apenas um teste do arquivo.

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

Respostas:

140

Você simplesmente acrescenta dois pontos e o nome da função, assim:

codecept run tests/acceptance/VisitorCest.php:myTestName

ou uma versão mais curta:

codecept run acceptance VisitorCest:myTestName

(Observe o espaço entre o nome da suíte e o nome do arquivo.)

Tzook Bar Noy
fonte
apenas uma nota. você não pode executar um único teste se for um teste de unidade (estendido de PHPUnit_Framework_TestCase ), pois a codeception não tem opção de filtro (ao contrário do phpunit )
coviex
3
unidade de execução de codecept / TestThatExtendsPHPUnit.php: testMethod funciona perfeitamente para mim.
mike.pj
4
Você pode omitir a .phpextensão do nome do arquivo, como este:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
jlapoutre
myTestNametambém não precisa ser o nome completo do teste. Ele executará todos os testes com uma correspondência parcial
andrewtweber
Como posso executar com dependências também?
Diogo Alves
39

isso é o que funciona:

codecept executado {suite-name} {file-name} .php: {function-name}

observe o espaço entre o nome da suíte e o nome do arquivo

Mahmoud Zalt
fonte
tecnicamente, você tem a solução mais geral. mas, como comprovado, a maioria das pessoas prefere ver exemplos.
iGbanam
2
Não precisa da .phppeça.
tivnet
2
@tivnet Isso é válido apenas para Codeception 2.x
conceptdeluxe
21

Além da resposta fornecida por @Tzook Bar Noy, você pode adicionar um trailing $quando houver vários testes que começam com o mesmo nome . Considere o seguinte exemplo:

<?php

use \AcceptanceTester;

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

    public function aboutPageOption(AcceptanceTester $I)
    { 
    }
}

Onde o seguinte comando executará ambos os testes:

codecept run tests/acceptance/VisitorCest.php:aboutPage

Isso executará apenas o primeiro:

codecept run tests/acceptance/VisitorCest.php:aboutPage$
conceito luxuoso
fonte
10

Uma maneira mais adequada de fazer isso será atribuir uma anotação de grupo ao caso de teste em questão. Isso é preferível pelo seguinte motivo; Se você tiver dois casos de teste, por exemplo, na mesma classe VisitorCest;

public function aboutPage
public function aboutPage2

Executando

codecept run tests/acceptance/VisitorCest.php:aboutPage

executará os casos de teste VisitorCest: aboutPage e VisitorCest: aboutPage2.

Atribuir um grupo a um caso de teste como este

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

E execute este caso de teste particular como este

codecept run -g aaa

Akongnwi Devert
fonte
5

Além das respostas anteriores, você pode executar um ou vários métodos agrupando por um determinado nome:

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

Use a opção -ge o nome do grupo:

$ codecept run acceptance VisitorCest -g test-aboutPage
Igor Parra
fonte
Eu preferiria uma maneira um pouco diferente, já que você pode usar a guia nesse caso e navegar facilmente até um Cest desejado, `codecept run tests / customization / VisitorCest -group test-aboutPage`
Stipe
2

isto é o que eu faço. php codecept.phar run unit UnitNameTest.php

Yann 叶
fonte
Irrelevante para a pergunta feita
tivnet
1

Se estiver usando PHP Yii2 Framework, você poderá executar apenas um teste usando este comando.

Certifique-se de estar no diretório de testes.

cd /codeception/frontend

codecept run -vv acceptance HomeCept
Muhammad Shahzad
fonte
Isso não está relacionado ao Yii2, mas ao fato de que a Ceptcontém apenas um teste, mas a Cestpode conter vários testes - veja a pergunta inicial
Oliver Hader
-1

Experimente phpunit --filter {TestMethodName} {FilePath}

atul_systematix
fonte