phpspec和laravel设置

Ada*_*ski 4 phpspec laravel

我正在建立一个新的Laravel项目并整合PHPSpec.我无法找到一个与Laravel整齐合作的phpspec.yml文件的良好工作示例.与Rails中的RSpec类似.

我想要的文件夹结构如下

spec/
    models/
    controllers/
app/
    models/
    controllers/
Run Code Online (Sandbox Code Playgroud)

我的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'  
Run Code Online (Sandbox Code Playgroud)

我在spec/models文件夹中复制了我的模型相关测试,但是当我'phpspec运行'它没有运行它们中的任何一个.我也意识到命名空间不是Laravel中的'Model'和'Controller',也许更像是Eloquent和BaseController.

我也使用这个扩展名:https://github.com/BenConstable/phpspec-laravel

我不知道如何设置它,找不到任何有用的例子.提前致谢!

编辑:来自Jeffrey Way的另一个论坛上的建议:

您可以使用Behat测试您的控制器.PHPSpec不能代替它(或Codeception).

更新:

我已经决定使用Codeception,因为它似乎整齐地集成到Laravel并广泛使用.

Ada*_*ski 5

请通过Ben Constable的电子邮件回复:

使用Laravel及其默认文件布局设置PHPSpec非常困难,我还没有想出如何做到这一点.但是,您可以使用稍微不同的布局,例如:

- app
    - Controllers
        - MyController.php
    - Models
        - MyModel.php
- spec
    - Controllers
        - MyControllerSpec.php
    - Models
        - MyModelSpec.php
Run Code Online (Sandbox Code Playgroud)

然后,在你的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'
Run Code Online (Sandbox Code Playgroud)

最后,你需要修改composer.json,包括app/在自动加载类的地图.您的模型,控制器和其他任何内容都将被命名空间,如:

<?php namespace Controllers;

use Controller;

class MyController extends Controller {}
Run Code Online (Sandbox Code Playgroud)

那应该是你排除.顺便说一句,当我一直在制作Laravel项目时,我一直把所有东西都放在app/src/MyVendor/MyNamespace/Controllers等等中,我更喜欢它作为布局(使源远离配置和其他文件,并且类似于Laravel包的布局) .

在将来,我将尝试调查它,看看我是否可以使用默认的Laravel布局使用PHPSpec - 如果/当我这样做时,我将在GitHub上更新项目.