Итак, я пытаюсь обновить пакет, который я использовал для Laravel 4, чтобы он был совместим с Laravel 5, так как исходный репозиторий некоторое время не обновлялся, и ему нужно было несколько настроек для работы с Laravel. 5.
Я сделал необходимые изменения и создал тянуть запрос в исходный репозиторий.
Я заметил, что юнит-тесты провалились, поэтому я попытался покопаться в нем. До сих пор я ничего не делал с PHPUnit, поэтому решил, что это будет хорошим опытом обучения.
Я не прошу помощи с ошибкой, отображаемой на github. Мне удалось обойти эту ошибку, но я добился этого, удалив некоторые тесты, что, конечно, не является реальным решением, поэтому эти изменения не зафиксированы. Я исправлю это, как только у меня будет лучшее понимание того, как работает модульное тестирование.
Кажется, у меня проблема в том, что одна из вспомогательных функций Laravel используется в конфигурационном файле пакета по умолчанию: base_path()
не определено
Как я понимаю, PHPUnit работает с классами, и мне нужно было бы смоделировать функцию для ее использования. Не могу найти прямой ответ КАК это сделать.
Поскольку он указывает переменную конфигурации на папку, которой нет в моей иерархии хранилища, я даже не уверен, что она должна возвращать.
Файл, который вызывает проблему, является конфигурацией по умолчанию, расположенной в polyglot / config / polyglot.php
return [
// Whether to swap out the facades (Router, Lang, etc) with
// Polyglot's, disable this if you need other packages to do the same
// Can specify an array of facades to swap, eg. ['Lang', 'URL']
'facades' => true,
// Locales
////////////////////////////////////////////////////////////////////
// The default locale if none is provided in the URL
// Leave empty to force the use of locales prefixes in URLs
'default' => 'en',
// The fallback locale for translations
// If null, the default locale is used
'fallback' => null,
// The available locales
'locales' => [],
// Gettext
////////////////////////////////////////////////////////////////////
// The domain of your translations, for gettext use
'domain' => 'messages',
// Where the PO/MO files reside
'folder' => base_path('resources/lang'),
// Format of the compiled files
'file' => '{domain}.po',
// Database
////////////////////////////////////////////////////////////////////
// The pattern Polyglot should follow to find the Lang classes
// Examples are "Lang\{model}", "{model}Lang", where {model}
// will be replaced by the model's name
'model_pattern' => '{model}Lang',
];
Итак, что типично делать в этой ситуации? Определить функцию вручную? Включить вспомогательный файл как-нибудь? Или отказаться от использования функции и пойти с решением, используя основные ссылки на каталог php? Любая помощь будет оценена.
base_path
стандартный помощник Laravel Это доступно каждый раз, когда Laravel загружается. Правильный подход — загрузка Laravel в ваших тестах через TestCase
Базовый класс включен в Laravel. Обратитесь к официальному руководство по тестированию а также этот Ларакаст.
Вы не должны издеваться над методом. Вы не должны заменять его ссылками на файлы и сборкой строк. Выполнение любого из этих перемещений кода далеко от интеграции Laravel, а не в сторону, как вы хотели сделать с обновлением L5.
Других решений пока нет …