рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд┐рдореНрдлрдиреА 2 рдмрдВрдбрд▓реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг

рдореИрдВ рдПрдХ рдЫреЛрдЯреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд╣реЛрдЯрд▓ рдХреЗ рдХрдорд░реЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рдо рдерд╛, рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдкрд╕рдВрджреАрджрд╛ рдкреИрдХрдЧрд┐рд╕реНрдЯ рдкрд░ рдЪрдврд╝ рдЧрдпрд╛, рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдФрд░, рдореЗрд░реА рдЧрд╣рд░реА рдирд┐рд░рд╛рд╢рд╛ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдареАрдХ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рдХрд░рдирд╛ рд╣реИ - рд╣рдо рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗред рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ, рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЧреАрдердм рдкрд░ рдПрдХ рд▓рд┐рдЦрд┐рдд рдмрдВрдбрд▓ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдпрд╣ рд╕рд╡рд╛рд▓ рдЖрдпрд╛: рдПрдХ рдЕрд▓рдЧ рдмрдВрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрд╡реЗрджрди рд╣реА рдирд╣реАрдВ рд╣реИред рдЙрд╕рдиреЗ рдЧреВрдЧрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рднреА рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдереЛрдбрд╝реА-рдереЛрдбрд╝реА рдХрд░рдХреЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреА рдереА, рдФрд░ рдЕрдм рдореИрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ


рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рднрдВрдбрд╛рд░ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред рд╣рдорд╛рд░реЗ рдмрдВрдбрд▓, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

$ composer init #


рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИред composer.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдХрдИ рдЦрдВрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ: require , require-dev , suggest ред рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ:

рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
$ composer install

рдареАрдХ рд╣реИ, рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рдеред

рдХреЛрд░


рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрд▓рд╛рд╕ рдСрдЯреЛрд▓реИрдб

рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА bootstrap.php .php рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ phpunit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
 <?php use Doctrine\Common\Annotations\AnnotationRegistry; //    Doctrine   use Composer\Autoload\ClassLoader; /** * @var ClassLoader $loader */ $loader = require __DIR__.'/../vendor/autoload.php'; AnnotationRegistry::registerLoader(array($loader, 'loadClass')); //    Doctrine   return $loader; 


рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рд░реЗрдЦрд╛ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ AnnotationRegistry::registerLoader(array($loader, 'loadClass')); ред рдореЗрд░рд╛ рдмрдВрдбрд▓ рдбреЙрдХреНрдЯреНрд░рд┐рди рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рдерд╛ рдЬрдм рдореБрдЭреЗ рдмрд╛рд░-рдмрд╛рд░ "рдПрдиреЛрдЯреЗрд╢рди рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛" рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рд╛ред

рд╣рдорд╛рд░реЗ phpunit.xml.dist рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ bootstrap.php phpunit.xml.dist рдХрд╣рд╛рдВ рд╣реИ
 <phpunit bootstrap="./Tests/bootstrap.php"> 

AppKernel рдФрд░ рдХрдВрд╕реЛрд▓

рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ Tests/fixtures рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЭреВрда рд╣реЛрдВрдЧреАред рдХрд┐рд╕реА рднреА AppKernel рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ AppKernel , рдЗрд╕реЗ Tests/fixtures/app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдПрдВ
 <?php use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\HttpKernelInterface; class AppKernel extends Kernel { /** * @return array */ public function registerBundles() { $bundles = array( //     ); return $bundles; } /** * @param \Symfony\Component\Config\Loader\LoaderInterface $loader */ public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load(__DIR__ . '/config/config.yml'); } } 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд╝рд╛рдЗрд▓ Tests/fixtures/app/config/config.yml рдмрдирд╛рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдХрдВрд╕реЛрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ Tests/fixtures/app/console рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 #!/usr/bin/env php <?php // if you don't want to setup permissions the proper way, just uncomment the following PHP line // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information //umask(0000); set_time_limit(0); require_once __DIR__.'/../../bootstrap.php'; require_once __DIR__.'/AppKernel.php'; use Symfony\Bundle\FrameworkBundle\Console\Application; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Debug\Debug; $input = new ArgvInput(); $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev'); $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod'; if ($debug) { Debug::enable(); } $kernel = new AppKernel($env, $debug); $application = new Application($kernel); $application->run($input); 

рдЕрдм рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдореВрд▓ рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ phpunit.xml.dist :
 <php> <server name="KERNEL_DIR" value="Tests/Fixtures/app/" /> </php> 


рдЗрди рд╕рд░рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдирд╛ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ Symfony\Bundle\FrameworkBundle\Test\WebTestCase рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╕рд┐рдореНрдлрдиреА 2 рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдзрд┐рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреВрд░рд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ

рдкреБрдирд╢реНрдЪ: рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рдбреЙрдХреНрдЯреНрд░рд┐рди рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред

Source: https://habr.com/ru/post/In221259/


All Articles