我正在建立一个新的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并广泛使用。
答案 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