मैं ट्रैविस कंटेनर में यूनिट परीक्षण चलाने के लिए 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
मेरी परियोजना इस तरह दिखती है:
मेरे द्वारा चलाए जा रहे परीक्षणों के कुछ उदाहरण:
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
फ़ाइल का उपयोग कर सके?
2 जवाब
PHPUnit APP_ENV
नामक एक पर्यावरण चर का उपयोग करता है यह निर्धारित करने के लिए कि किस वातावरण का उपयोग किया जाता है। मुझे ट्रैविस में यह पर्यावरण चर बनाना था।
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
पर सेट करना इसे हल करना चाहिए।
संबंधित सवाल
नए सवाल
symfony
सिम्फनी वेब अनुप्रयोगों के निर्माण के लिए एक PHP फ्रेमवर्क दोनों के साथ-साथ उन घटकों के एक सेट को संदर्भित करता है जिस पर फ्रेमवर्क बनाया गया है। यह टैग वर्तमान में समर्थित प्रमुख संस्करणों 3.x, 4.x और 5.x को संदर्भित करता है। वैकल्पिक रूप से आप संबंधित टैग का उपयोग करके एक सटीक संस्करण निर्दिष्ट कर सकते हैं। इस टैग का उपयोग सिम्फनी 1.x के बारे में प्रश्नों के लिए नहीं किया जाना चाहिए। कृपया इसके बजाय Symfony1 टैग का उपयोग करें।