我目前正在使用 Phpspec 进行 Symfony2 项目,并且在扩展在不同命名空间中描述的 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)
.
预先感谢您的帮助。