Phalcon PHP Unit Testing DI Shared Instance - PullRequest
       19

Phalcon PHP Unit Testing DI Shared Instance

0 голосов
/ 30 ноября 2018

Итак, я начал внедрять модульное тестирование как часть моего приложения phalcon и столкнулся с проблемой, связанной с использованием контейнера Phalcon DI.Возможно, это просто мое непонимание, но я не могу заставить мой сервис использоваться в качестве общего экземпляра во всех тестовых случаях.С этого можно начать?Я искал в Интернете столько ресурсов, сколько мог найти и даже следовал учебному пособию на веб-сайте Phaclon, но безрезультатно.Итак, вот мои файлы до сих пор

init.php

<?php

 use Phalcon\Loader;
 use Phalcon\Di;
 use Phalcon\Di\FactoryDefault;

 ini_set("display_errors", 1);
 error_reporting(E_ALL);

 define("ROOT_PATH", __DIR__);
 define("SRC_PATH", __DIR__ . '/../src');

 set_include_path(
     ROOT_PATH . PATH_SEPARATOR . get_include_path()
 );

 // Required for phalcon/incubator
 include __DIR__ . "/../vendor/autoload.php";

 // Setup Phalcon autoloader.
 $loader = new Loader();

 $loader->registerDirs(
    [
      ROOT_PATH,
      SRC_PATH . '/util'
    ]
 );

 $loader->registerNamespaces(
    [
     'App\Test\Libs' => ROOT_PATH . '/libs'
    ]
);

$loader->register();

// Setup DI Container.
$di = new FactoryDefault();

$di->setShared('someClass', function () {
 return new \App\Test\Libs\SomeClass();
});

Di::setDefault($di);

Теперь в моем UnitTestCase если я сделаю

  public function setUp() { 
     parent::setUp();

     $di = Di::getDefault();

     var_dump($di->getServices()); // None of my services from the bootstrap show up ???
     $this->setDi($di);

     $this->_loaded = TRUE;
  }

И в результате вышеизложенного ни один из моих реальных тестов, расширяющих UnitTestCase , не может получить доступ к пользовательским службам.

Я пытался переместить инициализацию Phalcon DI в UnitTestCase setUp(), однако это означало, что каждый раз возвращался новый экземпляр моего сервиса, когда я хотел бы просто получить тот жепример.

Так чего-то мне не хватает?Это даже правильный способ сделать это?

Буду очень признателен за любые указания по этому вопросу

1 Ответ

0 голосов
/ 04 декабря 2018

Я рекомендую настроить PHPUnit для загрузки файла начальной загрузки Phalcon, который устанавливает DI вашего приложения.

<phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="./bootstrap.php">

Возможно, вам придется изменить ./bootstrap.php на файл, который загружает экземпляр Phalcon вашего приложения и DI.

...