我放弃了之前的问题,因为它太复杂了,下面是新版本。我想对 psr-4格式化的项目使用 phpspec,下面是我尝试建立一个测试项目的方法:
-
为项目创建一个新文件夹:
cd ~/Desktop/ mkdir TestPhpSpec cd TestPhpSpec
-
创建一个新的 composer.json文件,并要求 phpspec:
composer require phpspec/phpspec
这创造了我的Composer.json档案:
{
"require": {
"phpspec/phpspec": "^2.3"
}
}
-
我将 psr-4名称空间添加到 composer.json 文件的 autoload 属性中:
{ "require": { "phpspec/phpspec": "^2.3" }, "autoload": { "psr-4": { "Acme\\": "src/Acme" } } }
然后我转储自动加载以确保我的名称空间被加载:
composer dumpautoload
-
之后,我创建了 phpspec.yml 来描述 phpspec 的名称空间:
suites: acme_suite: namespace: Acme psr4_prefix: Acme
-
然后我描述了我想要开始构建的类:
phpspec describe Acme/Markdown
这就是我遇到第一个问题的地方,尽管我在 describe 中指定了 Acme 名称空间命令,spec 仍不会被放置在与命名空间相匹配的文件夹中。
尽管它创建的类的命名空间是正确的:
<?php
namespace spec\Acme; // correct namespace
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class MarkdownSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType('Acme\Markdown');
}
}
然后,如果我尝试运行测试来开始 TDD-ing:
phpspec run
它提出为我创建一个类,我也让它这么做了。从这里我得到了第二个问题——我得到了错误消息:
[PhpSpec\Process\Prerequisites\PrerequisiteFailedException] The type Acme\Markdown was generated but could not be loaded. Do you need to configure an autoloader?
而且它创建的类不在命名空间文件夹中。
它创建的类的命名空间也是正确的:
<?php
namespace Acme; // correct namespace
class Markdown
{
}
我看了文件,找不出我哪里做错了,你们有什么建议吗?