phpspec和laravel设置

时间:2014-03-11 10:53:02

标签: laravel phpspec

我正在建立一个新的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运行'它没有运行任何一个。 我也意识到命名空间不是' Model'和'控制器'在Laravel中,或许更像是Eloquent和BaseController ..

我也在使用此扩展程序:https://github.com/BenConstable/phpspec-laravel

我不确定如何设置它,找不到任何有效的例子。 提前谢谢!

编辑: 在Jeffrey Way的另一个论坛上提出建议:

  

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

更新:

我决定使用Codeception,因为它似乎整齐地整合到Laravel并广泛使用。

2 个答案:

答案 0 :(得分: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/Controllers等中,我更喜欢它作为布局(使源远离配置和其他文件,并且类似于Laravel包的布局。)

     

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

答案 1 :(得分:2)

对于使用Laravel 5.x和PhpSpec 4.x的用户,可以使用PSR4 prefix configuration进行调整,以使PhpSpec与Laravel布局兼容。

我的项目使用了这个配置:

suites:
    app:
        namespace: App
        src_path: app
        psr4_prefix: App
        spec_prefix: classes
        spec_path: specs