4

我正在建立一个新的 Laravel 项目并集成 PHPSpec。我很难找到一个可以与 Laravel 完美配合的 phpspec.yml 文件的工作示例。与 Rails 中的 RSpec 类似。

我想要的文件夹结构如下

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

我不确定如何设置它,也找不到任何工作示例。提前致谢!

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

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

更新:

从那以后,我决定改用 Codeception,因为它似乎巧妙地集成到 Laravel 中并被广泛使用。

4

2 回答 2

5

Ben Constable通过电子邮件亲切地回答:

使用 Laravel 使用其默认文件布局设置 PHPSpec 非常困难,我还没有弄清楚如何去做。但是,您可以使用稍微不同的布局使其工作,例如:

- 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/Controllersetc 中,我更喜欢将其作为布局(使源远离配置和其他文件,并且类似于 Laravel 包的布局) .

将来,我会尝试研究它,看看我是否可以让 PHPSpec 使用默认的 Laravel 布局——如果/当我这样做时,我会在 GitHub 上更新项目。

于 2014-03-11T16:52:55.387 回答
2

对于使用 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
于 2017-11-06T08:43:13.460 回答