2016-01-22 1 views
0

Если вы ищете phalcon phpunits в Google, вы найдете официальную статью с phalcon, как заставить ее работать. В этой статье приведен пример TestHelper. Примеры хороши - но их необходимо подробно описать.Модульные тесты на фалконе без композитора

Сначала создается DI с FactoryDefaults. Я не использую FactoryDefaults. Во-вторых, создаются константы пути - зачем и что мне нужно (я даже не нашел дерево проекта).

И я thinl следующий будет сгенерировано сообщение об ошибке:

включают DIR. "/../vendor/autoload.php";

Я не хочу использовать композитор, npm, grunt, gem или любой другой помощник по упаковке, потому что мне не нравится мысль о том, что внешнее приложение выполняет некоторую «магию» в моем проекте. Загрузите файл и загрузите его, я могу сделать сам и установить приложение (например, phpunits). Я скорее использую диспетчер упаковки из моего os (pacman).

Но когда я посмотрел на phalcon/инкубатор, такого продавца нет и нет такого автозагрузки файла. Как это сделать? Для чего этот файл? Куда это взять?

Конкретный вопрос: как получить модульные тесты для запуска без установки композитора?

+0

Композитор делает нет магии. Вы настраиваете нужные пакеты в JSON.Затем они загружаются и генерируется автозагрузчик. Вы включаете автозагрузчик, чтобы классы могли быть автоматически загружены при создании экземпляра. Вы когда-нибудь использовали его в реальном проекте? Если нет, я бы рекомендовал попробовать, прежде чем отбрасывать его. – gontrollez

+0

Спасибо за помощь. Создание автозагрузчика, хранение файлов в предопределенной структуре - это волшебство и не имеет ничего общего с моим проектом. Поэтому мне, возможно, придется создать автозагрузчик в тестах и ​​добавить туда инкубатор, чтобы узнать, что и как мне нужно установить композитор, создать новый проект, создать композитор.json и установить инкубатор там – iRaS

ответ

0

Чтобы использовать его без композитор вы можете скачать или клонировать необходимые проекты:

Phalcon Incubator - https://github.com/phalcon/incubator
Swiftmailer - https://github.com/swiftmailer/swiftmailer
Fork-Helper - https://github.com/duncan3dc/fork-helper

сохранить их в отдельный каталог и создать autoload.php byself как это одна:

class UnitTestAutoload 
{ 
    protected $prefixLength = []; 
    protected $prefixDirs = []; 
    protected $fallbackDirs = []; 
    protected $classMap = []; 

    public function loadClass($class) 
    { 
     if ($file = $this->findFile($class)) { 
      includeFile($file); 
      return true; 
     } 
    } 

    public function setNamespaceMapping($prefix, $paths) 
    { 
     if (!$prefix) { 
      $this->fallbackDirs = (array)$paths; 
     } else { 
      $length = strlen($prefix); 
      if ('\\' !== $prefix[$length - 1]) { 
       throw new InvalidArgumentException("A non-empty prefix must end with a namespace separator."); 
      } 
      $this->prefixLength[$prefix[0]][$prefix] = $length; 
      $this->prefixDirs[$prefix] = (array)$paths; 
     } 
    } 

    protected function findFile($class) 
    { 
     if ('\\' == $class[0]) { 
      $class = substr($class, 1); 
     } 

     if (isset($this->classMap[$class])) { 
      return $this->classMap[$class]; 
     } 

     $file = $this->searchFile($class); 

     if ($file === null) { 
      return $this->classMap[$class] = false; 
     } 

     return $this->classMap[$class] = $file; 
    } 

    protected function searchFile($class) 
    { 
     $logicalPath = strtr($class, '\\', DIRECTORY_SEPARATOR) . '.php'; 

     $first = $class[0]; 
     if (isset($this->prefixLength[$first])) { 
      foreach ($this->prefixLength[$first] as $prefix => $length) { 
       if (0 === strpos($class, $prefix)) { 
        foreach ($this->prefixDirs[$prefix] as $dir) { 
         if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPath, $length))) { 
          return $file; 
         } 
        } 
       } 
      } 
     } 

     foreach ($this->fallbackDirs as $dir) { 
      if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPath)) { 
       return $file; 
      } 
     } 

     return null; 
    } 
} 

function includeFile($file) 
{ 
    include $file; 
} 

function requireFile($file) 
{ 
    require $file; 
} 

$_unitTestAutoload = new UnitTestAutoload(); 
$_unitTestAutoload->setNamespaceMapping('duncan3dc\\Helpers\\', array(__DIR__ . '/duncan3dc/fork-helper/src')); 
$_unitTestAutoload->setNamespaceMapping('Phalcon\\', array(__DIR__ . '/phalcon/incubator/Library/Phalcon')); 
spl_autoload_register([$_unitTestAutoload, 'loadClass'], true, true); 

requireFile(__DIR__ . '/swiftmailer/swiftmailer/lib/swift_required.php'); 
1

Если у вас есть вопрос правильно, вы ищете способ написать тесты для своего приложения Phalcon, которое не зависит от решения, которое может быть установлено только с Composer.

Плохая новость: вам определенно нужна какая-то структура тестирования, и вам придется интегрировать ее в свой проект. Хорошая новость, однако, что есть хорошее решение: Codeception. Это тестовая среда, в которой выделены модули для нескольких фреймворков PHP, включая Phalcon.

Вы можете установить Codeception либо через Composer (вы этого не хотите, я получаю), либо вы можете просто захватить файл Phar.

В принципе, то, что вы хотите делать дальше это:

  • Run codecept bootstrap --empty из корневого каталога вашего проекта
  • Создать тестовый набор
  • Имейте это использовать модуль Phalcon2 Codeception и создать загрузочный файл ваше приложение
  • Возможно, интегрируйте PhantomJS и проверите свой GUI
  • Сделайте много других интересных вещей

Это только приблизительное руководство, поскольку ваш вопрос слишком широк, чтобы вдаваться в подробности.