Я добавляю composer и PHPSpec в установленную проприетарную среду, но не могу заставить PHPSpec работать с глобальным пространством имен, когда тестируемые классы находятся в нестандартном каталоге, который должен быть определен с помощью psr-4.
Файловая структура, которую вы должны знать в проекте, выглядит следующим образом:
/root
/spec
/classnameSpec.php
/classes
/autoload
/classname.php
Каталог автозагрузки заполнен основными классами для приложения, и они должны пока оставаться здесь, они не должны находиться в каталоге по умолчанию / src, который использует PHPSpec.
У меня это работает, используя пространство имен с этим (частично) файлом композитора
{
"require": {
"phpspec/phpspec": "3.2.2"},
"autoload": {
"psr-4": {
"Core\\": "classes/autoload"}
}
}
и этот файл phpspec.yml:
suites:
autoload_suite:
namespace: 'Core'
spec_prefix: ''
spec_path: ./spec
psr4_prefix: 'Core'
src_path: classes/autoload
но это потребует добавления пространств имен ко всем существующим классам, если я когда-нибудь захочу создать тесты для их запуска.
Документы PHPSpec предполагают, что возможно иметь нулевое пространство имен, если не указывать свойство namespace в файле yml, но любая комбинация, которую я пробую, приводит к ошибке.
Когда я делаю
phpspec desc classname
он успешно создает тестовый класс в папке spec, но когда я запускаю phpspec, я получаю:
[InvalidArgumentException]
PSR4 prefix doesn't match given class namespace.
Я попытался оставить оба свойства равными null, », \\, «\\», ‘\\’, \ и удалить их оба, но ни одно из них не работает. Есть ли определенная комбинация свойств, которые я могу использовать, которые будут работать, или я смирился с необходимостью сначала добавить пространства имен ко всему?
(Должен отметить, что я изменил свойство psr-4 в composer на «\»: classes / autoload)
Я получил ответ, который искал от Unfunco, на странице вопросов PHPSpec Github. Оказывается, вы должны полностью пропустить свойства из файла yml, а не просто установить их в нулевые строки.
Итак, файл композитора выглядит так:
{
"require": {
"phpspec/phpspec": "3.2.2"},
"autoload": {
"psr-4": {
"": "classes/autoload"}
}
И файл YML, это:
suites:
autoload_suite:
src_path: classes/autoload
Других решений пока нет …