我废弃了我问题的早期形式,因为它太复杂了。这是新版本。
我想在我的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
文件的自动加载属性中:
{
"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命名空间,规范也不会放在与命名空间匹配的文件夹中:
虽然它创建的类是正确命名空间的:
<?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 \过程\先决条件\ PrerequisiteFailedException] Acme \ Markdown类型已生成但无法加载。您需要配置自动加载器吗?
它创建的类不在它的命名空间文件夹中:
它创建的类也正确命名空间:
<?php
namespace Acme; // correct namespace
class Markdown
{
}
我查看了文档,无法弄清楚我做错了什么。有什么建议吗?
答案 0 :(得分:3)
尝试
suites:
acme_suite:
src_path: Acme/src
spec_path: Acme/spec