настройка phpspec и laravel

Я создаю новый проект Laravel и интегрирую PHPSpec. У меня возникли проблемы с поиском хорошего рабочего примера файла phpspec.yml, который бы аккуратно работал с Laravel. Аналогично RSpec в Rails.

Моя желаемая структура папок будет следующей

spec/
    models/
    controllers/
app/
    models/
    controllers/

Мой phpspec.yml в настоящее время выглядит так:

suites:
controller_suite:
    namespace: Controller
    spec_path: 'spec/controllers'
    src_path: 'app/controllers'

model_suite:
    namespace: Model
    spec_path: 'spec/models'
    src_path: 'app/models'  

Я скопировал свои тесты, связанные с моделью, в папку spec/models, но когда я запускаю phpspec, он не запускает ни один из них. Я также понимаю, что пространство имен не «Модель» и «Контроллер» в Laravel, возможно, больше похоже на Eloquent и BaseController.

Я также использую это расширение: https://github.com/BenConstable/phpspec-laravel

Я не уверен, как это настроить, и не могу найти рабочих примеров. Заранее спасибо!

РЕДАКТИРОВАТЬ: Совет найден на другом форуме от Джеффри Уэя:

Вы можете протестировать свои контроллеры с помощью Behat. PHPSpec не заменяет его (или Codeception).

ОБНОВИТЬ:

С тех пор я решил использовать Codeception вместо этого, так как он, кажется, аккуратно интегрируется в Laravel и широко используется.


person Adamski    schedule 11.03.2014    source источник
comment
Я знаю, что с тех пор вы решили использовать Codeception, но на Laracasts есть бесплатное видео (по-моему, автор Джеффри Уэй), в котором описывается, как использовать phpspec с Laravel. Это около 15 минут, но я подумал, что это время было потрачено не зря. laracasts.com/lessons/phpspec-laravel-and-refactoring   -  person user1669496    schedule 27.03.2014
comment
@user3158900 user3158900 спасибо, я проверю это, похоже, что он больше предназначен для модульного тестирования, и что может работать комбинация phpspec и codeception ..   -  person Adamski    schedule 03.04.2014


Ответы (2)


Бен Констебл любезно ответил по электронной почте:

Настроить PHPSpec с Laravel с его макетом файла по умолчанию довольно сложно, и я еще не понял, как это сделать. Однако вы можете заставить его работать с немного другим макетом, например:

- app
    - Controllers
        - MyController.php
    - Models
        - MyModel.php
- spec
    - Controllers
        - MyControllerSpec.php
    - Models
        - MyModelSpec.php

тогда в вашем phpspec.yml у вас будет:

extensions:
    - PhpSpec\Laravel\Extension\LaravelExtension

suites:
    laravel_controller_suite:
        namespace: Controllers
        src_path: app
    laravel_model_suite:
        namespace: Models
        src_path: app

laravel_extension:
    testing_environment: 'testing'

и, наконец, вам нужно изменить composer.json, чтобы включить app/ в карту классов автозагрузки. Ваши модели, контроллеры и все, что затем будет помещено в пространство имен, например:

<?php namespace Controllers;

use Controller;

class MyController extends Controller {}

Это должно вас устроить. Кроме того, когда я делал проекты Laravel, я помещал все в app/src/MyVendor/MyNamespace/Controllers и т. д., что я предпочитаю в качестве макета (держит исходный код отдельно от конфигурации и других файлов и похож на макет пакетов Laravel). ).

В будущем я попытаюсь изучить его и посмотреть, смогу ли я заставить PHPSpec работать с макетом Laravel по умолчанию — я обновлю проект на GitHub, если/когда я это сделаю.

person Adamski    schedule 11.03.2014
comment
Спасибо Бену за это. Я был совершенно потерян, почему мой не работал, а затем увидел этот элемент расширений. Я даже не пытался тестировать контроллеры и модели, только свои собственные классы, но в кли после моих тестов выдавалось сообщение об ошибке. - person alexleonard; 04.04.2014

Для тех, кто использует Laravel 5.x и PhpSpec 4.x, вы можете настроить с помощью настройка префикса PSR4, чтобы сделать PhpSpec совместимым с макетом Laravel.

В моем проекте использовалась эта конфигурация:

suites:
    app:
        namespace: App
        src_path: app
        psr4_prefix: App
        spec_prefix: classes
        spec_path: specs
person Earl Lapura    schedule 06.11.2017
comment
Я боролся с этим довольно долго. Сочетание spec_prefix и spec_path помогло, спасибо, что поделились. - person dajoto; 16.09.2018