我正在尝试建立一个名为travis
的新Symfony环境,以在Travis容器中运行单元测试。
我设置了此环境,以使其与prod
和dev
有所区别。
当前,我有:
SYMFONY_ENV=travis
环境变量config_travis.yml
,其中包含我对Travis环境的配置app_travis.php
,用于指定要加载的环境.travis.yml
:>
language: php
php:
- "7.2.17"
services:
- mysql
install:
- composer install --no-interaction
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('${MYSQL_PASSWORD}') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
- ./bin/console doctrine:database:create --env=travis
- ./bin/console doctrine:migration:migrate --env=travis --no-interaction
script:
- ./vendor/bin/simple-phpunit
我的项目看起来是这样的:
我正在运行的一些测试示例:
UserTest.php
用于测试User.php
模型:
<?php
namespace Tests\AppBundle\Entity;
use AppBundle\Entity\User;
use PHPUnit\Framework\TestCase;
use AppBundle\Entity\Responsibility;
class UserTest extends TestCase
{
public function testId()
{
$user = new User();
$id = $user->getId();
$this->assertEquals(-1, $id);
}
}
LoginControllerTest.php
测试LoginController.php
控制器:
<?php
namespace Tests\AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\BrowserKit\Cookie;
use Symfony\Component\HttpFoundation\Response;
class LoginControllerTest extends WebTestCase
{
/*
* Test the login form
* Logins with (admin, password : a)
*/
public function testLogin()
{
// Create a new client to browse the app
$client = static::createClient();
$crawler = $client->request('GET', '/login');
$this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET ");
// Get the form
$form = $crawler->selectButton('Connexion')->form();
// Fill the login form input
$form['_username']->setValue('admin');
$form['_password']->setValue('a');
// Send the form
$client->submit($form);
$crawler = $client->followRedirect();
$this->assertContains(
'Bienvenue admin.' ,
$client->getResponse()->getContent()
);
return array($client,$crawler);
}
}
我的问题是:除单元测试外,所有命令都运行到travis
环境中。我希望能够在计算机上的dev
环境中但在Travis容器的travis
环境中运行单元测试。
如何设置PHPUnit,使其可以在travis
环境中运行并使用config_travis.yml
文件?
答案 0 :(得分:0)
createClient()
的{{1}}方法从WebTestCase
调用bootKernel()
方法,而KernelTestCase
又调用createKernel()
。在createKernel()
中,有以下代码确定应在哪种环境下引导内核:
if (isset($options['environment'])) {
$env = $options['environment'];
} elseif (isset($_ENV['APP_ENV'])) {
$env = $_ENV['APP_ENV'];
} elseif (isset($_SERVER['APP_ENV'])) {
$env = $_SERVER['APP_ENV'];
} else {
$env = 'test';
}
因此,在您的情况下,将APP_ENV
文件中的config_travis.yml
变量导出并将其设置为travis
应该可以解决此问题。
答案 1 :(得分:0)