В настоящее время я работаю над проектом Symfony2 с Phpspec, и у меня возникают проблемы с расширением класса Spec, описанного в другом пространстве имен.
Например, в моем проекте у меня есть следующий класс, описанный в spec/Acme/Model/Foo/FooSpec.php
:
namespace spec\Acme\Model\Foo;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
abstract class FooSpec extends ObjectBehavior{
//some code here
}
И у меня есть еще один класс в spec/Acme/Model/Bar/BarSpec.php
, расширяющий FooSpec
:
namespace spec\Acme\Model\Bar;
use spec\Acme\Model\Foo\FooSpec;
class BarSpec extends FooSpec{
//some code here
}
Когда я пытаюсь запустить phpspec, у меня возникает следующая ошибка:
PHP Fatal error: Class 'spec\Acme\Model\Foo\FooSpec' not found in /home/user/Projects/Acme/spec/Acme/Model/Bar/BarSpec.php on line 9
Единственный способ заставить это работать, это добавить следующую строку в spec/Acme/Model/Bar/BarSpec.php
:
include('./spec/Acme/Model/Foo/FooSpec.php');
Я не знаю, почему я должен включать этот конкретный файл, чтобы он работал, особенно когда другие классы (например, PhpSpec\ObjectBehavior
) найдены правильно.
У вас есть идеи, почему это происходит?
Редактировать:
Как предложили @Phil и @Sheikh Heera в комментариях, я попытался настроить autoload
для регистрации пространства имен моей спецификации, но это тоже не работает. Вот что я пробовал до сих пор:
require_once getcwd() . '/vendor/composer/ClassLoader.php';
$loader = new \Composer\Autoload\ClassLoader();
// register classes with namespaces
$loader->add('spec', getcwd().'/spec');
// activate the autoloader
$loader->register();
Я также попытался изменить файл vendor/composer/autoload_namespaces.php
, чтобы добавить это:
return array(
//some code here
'spec' => array(getcwd() . '/spec'),
//some more code
);
Но все та же ошибка. Я также пробовал с 'spec' => array(getcwd())
или $loader->add('spec', getcwd());
, просто чтобы посмотреть, что произойдет, и на этот раз я получаю Cannot redeclare class
в другом классе спецификации.
Моя версия php PHP 5.4.9-4ubuntu2.4 (cli)
.
Спасибо заранее за вашу помощь.
spec
, о котором знает PHPSpec? - person Phil   schedule 17.02.2014