मैं ट्रैविस कंटेनर में यूनिट परीक्षण चलाने के लिए travis नामक एक नया सिम्फनी वातावरण स्थापित करने का प्रयास कर रहा हूं।

मैंने इस परिवेश को prod और dev से अलग करने के लिए सेट किया है।

वर्तमान में, मेरे पास है:

  • ट्रैविस में एक SYMFONY_ENV=travis पर्यावरण चर सेटअप
  • a config_travis.yml जिसमें ट्रैविस परिवेश के लिए मेरा कॉन्फ़िगरेशन शामिल है
  • a 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

मेरी परियोजना इस तरह दिखती है:

screenshot of the folders tree of my project

मेरे द्वारा चलाए जा रहे परीक्षणों के कुछ उदाहरण:

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 env में लेकिन ट्रैविस कंटेनर में travis env में यूनिट टेस्ट चलाने में सक्षम होना चाहता हूं।

मैं अपना PHPUnit कैसे सेटअप कर सकता हूं ताकि यह travis वातावरण में चल सके और मेरी config_travis.yml फ़ाइल का उपयोग कर सके?

1
darckcrystale 17 जून 2019, 14:22

2 जवाब

सबसे बढ़िया उत्तर

PHPUnit APP_ENV नामक एक पर्यावरण चर का उपयोग करता है यह निर्धारित करने के लिए कि किस वातावरण का उपयोग किया जाता है। मुझे ट्रैविस में यह पर्यावरण चर बनाना था।

screenshot of the Travis environment variables setting showing the environment variables I created

1
darckcrystale 3 जुलाई 2019, 19:10

createClient() की WebTestCase विधि KernelTestCase से bootKernel() विधि को कॉल करती है, जो बदले में 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
xabbuh 17 जून 2019, 14:53