2015-11-16 2 views
2

У меня возникла проблема с тестированием приложения Laravel, которое я унаследовал.Как изменить путь Behat из общей папки в другое имя папки

папка, как правило, помечены как «общественность» была переименована в «HTML».

Само приложение работает отлично, но когда Behat тесты запустить все еще ищет общую папку. Я был , работая около его просто копируя файл «html» и переименовывая его как общедоступный, но я хотел бы просто исправить это, чтобы я мог получить некоторых других сотрудников, тестирующих это приложение.

У меня есть , но смотрю в документации Behat и не удалось найти. Я тоже немного поработал над этим, но ничего не нашел.

Любой, кто знает, как устанавливает этот путь, поэтому вместо поиска папки под названием «public» я могу изменить ее, чтобы найти папку под названием «html».

Точная ошибка, я получаю

Warning: file_get_contents(/Library/WebServer/Documents/myApp/myApp/public/build/rev-manifest.json): failed to open stream: No such file or directory in /Library/WebServer/Documents/thirdspace-app/thirdspace/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php line 668 

Таким образом, в приведенном выше пути общественного должен быть HTML.

Это код, который ссылается в этой ошибки выглядит, как показано ниже

if (! function_exists('elixir')) 
{ 

    function elixir($file) 
    { 
     static $manifest = null; 

     if (is_null($manifest)) 
     { 
      $manifest = json_decode(file_get_contents(public_path().'/build/rev-manifest.json'), true); 
     } 

     if (isset($manifest[$file])) 
     { 
      return '/build/'.$manifest[$file]; 
     } 

     throw new InvalidArgumentException("File {$file} not defined in asset manifest."); 
    } 
} 

Я не хочу, чтобы изменить это, однако, потому что я думаю, что это повлияет на само приложение. Я просто хочу отправить тест, ищущий html вместо публики. Я просто хочу убедиться, что решение только влияет только на тесты, а не на приложение.

+0

Можете ли вы использовать символическую ссылку?'ln -s/path/to/html/path/to/public' – jperezov

+0

Не могли бы вы объяснить мне, что именно это делает? Более конкретно, это не меняет пути пути в отношении приложения, просто ли оно указывает на то, что ищет «public» для «html»? –

ответ

1

Это использует вспомогательную функцию Laravel public_path(), которая всегда будет возвращать путь, ожидающий каталог под названием public.

Существует несколько различных способов перезаписать это, но это, вероятно, самый простой. Для того, чтобы это выполнялось до Behat, определите это в bootstrap/app.php:

$app->bind('path.public', function() { 
    return base_path().'/html'; 
}); 
+0

Это уже находится в папке html точно так же, как и у вас. –

+0

О, хорошо, вы не упоминали, что вы уже переписываете его в index.php (если только он не используется по умолчанию в последнем патче Laravel, но я думаю, что я в курсе последних событий). Не могли бы вы попробовать мое второе предложение, которое я только что добавил, о том, чтобы поместить этот блок в 'bootstrap/app.php'. Я уверен, что это проблема, и теперь нам просто нужно найти нужное место, чтобы перезаписать эту вспомогательную функцию до того, как Behat ее использует. –

+0

Похоже, это сработало. Большое спасибо, вы не представляете, насколько это только улучшило мой рабочий день. –

0

Я не знаю, как Laravel использует тесты поведения, поэтому это довольно общий ответ. Я не знаю, почему тесты на поведение будут зависеть от этой папки, кроме поиска статического содержимого (например, uploads), хранящегося там. Может быть, вы можете добавить пример вывода из тестов на неудачу? 2 варианта, которые, я думаю, скорее всего будут содержать путь:

  • Если бы это было указано в одном из ваших контекстов, вы должны, вероятно, посмотреть там. Обычно они помещаются в подпапку features/, где находятся все ваши файловые файлы.
  • В противном случае Behat настроен через behat.yml в корне проекта. Возможно, вы захотите проверить paths и contexts (или, скорее, их параметры), определенные там.
Смежные вопросы