Configuração do ambiente de testes
O template de aplicação Yii já vem com o ambiente de testes configurado. Use esta página ao criar um novo projeto a partir do template, restaurar arquivos de teste removidos ou adicionar uma nova suíte.
Configuração do Composer
O template exige o Codeception, o PHPUnit e os módulos usados pelas suítes:
{
"require-dev": {
"codeception/codeception": "^5.3",
"codeception/module-asserts": "^3.2",
"codeception/module-cli": "^2.0",
"codeception/module-phpbrowser": "^3.0",
"phpunit/phpunit": "^11.5"
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests"
}
},
"scripts": {
"test": "codecept run"
}
}Se essas entradas já estiverem no seu projeto, mantenha as versões instaladas do composer.lock.
Arquivo principal do Codeception
O codeception.yml na raiz define o namespace dos testes, os caminhos, o arquivo de bootstrap e a origem da cobertura:
namespace: App\Tests
support_namespace: Support
bootstrap: bootstrap.php
settings:
shuffle: true
colors: true
paths:
tests: tests
output: tests/_output
data: tests/Support/Data
support: tests/Support
coverage:
enabled: true
show_uncovered: true
show_only_summary: true
include:
- src/*
- public/index.php
- yii
extensions:
enabled:
- Codeception\Extension\RunFailedtests/bootstrap.php prepara o ambiente da aplicação para todas as suítes:
<?php
declare(strict_types=1);
App\Environment::prepare();Defina APP_ENV=test ao executar os testes localmente:
APP_ENV=test vendor/bin/codecept runO serviço de testes do Docker lê o mesmo valor de docker/test/.env:
APP_ENV=test
APP_DEBUG=false
APP_C3=true
SERVER_NAME=:80
XDEBUG_MODE=coverage
COMPOSER_CACHE_DIR=/app/runtime/cache/composerSuítes
O template tem um arquivo de suíte por tipo de teste.
tests/Unit.suite.yml habilita as asserções do PHPUnit por meio do Codeception:
actor: UnitTester
modules:
enabled:
- Assertstests/Functional.suite.yml usa o helper FunctionalTester do projeto:
actor: FunctionalTestertests/Web.suite.yml inicia o servidor embutido e envia requisições HTTP com o PhpBrowser:
actor: WebTester
extensions:
enabled:
- Codeception\Extension\RunProcess:
0: composer serve
sleep: 3
modules:
enabled:
- PhpBrowser:
url: http://127.0.0.1:8080tests/Console.suite.yml habilita os testes de comandos de console:
actor: ConsoleTester
modules:
enabled:
- CliDepois de adicionar ou alterar uma suíte, reconstrua as ações geradas dos actors:
vendor/bin/codecept buildCom Docker:
make codecept buildConfiguração de testes
Coloque os parâmetros da aplicação exclusivos de teste em config/environments/test/params.php. A aplicação carrega esse arquivo quando APP_ENV=test.
Use o ambiente de teste para valores como:
- Nome e credenciais do banco de dados.
- Transporte do mailer.
- Transporte da fila.
- Armazenamento do cache.
- Caminhos dos destinos de log.
Mantenha as credenciais de teste separadas das credenciais de desenvolvimento e produção.
Redefinição de estado
Cada teste deve deixar para o próximo um estado previsível. Escolha uma estratégia de redefinição para cada recurso externo que o teste altera:
- Recrie ou trunque as tabelas do banco de dados antes dos testes de nível de aplicação.
- Limpe os pools de cache usados pelo ambiente de teste.
- Limpe sessões e cookies nos testes web.
- Remova arquivos gerados de
runtime. - Substitua e-mails enviados, filas e clientes HTTP por test doubles quando for viável.
Para testes de banco de dados, prefira um único fluxo de fixtures ou migrations para todo o projeto. Misturar estratégias de redefinição torna as falhas difíceis de reproduzir.
Cobertura
Execute a cobertura localmente quando o Xdebug ou outro driver de cobertura estiver habilitado:
APP_ENV=test APP_C3=true XDEBUG_MODE=coverage vendor/bin/codecept run --coverage --coverage-html --disable-coverage-phpCom Docker, as variáveis de cobertura já estão em docker/test/.env:
make test-coverage