我正在建立一个新的Laravel项目并集成PHPSpec。我很难找到一个很好的phpspec工作示例。该文件将与Laravel配合使用。类似于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 run'时,它没有运行任何一个。我也意识到,命名空间不是"模型"one_answers"控制器"在Laravel,也许更像雄辩和BaseController..
我也使用这个扩展:https://github.com/BenConstable/phpspec-laravel
我不知道如何设置这个,找不到任何工作的例子。提前感谢!
编辑:Jeffrey Way在另一个论坛上给出的建议:
更新:你可以用behaat测试你的控制器。PHPSpec不是替代品为它(或Codeception)。
我已经决定使用Codeception代替,因为它似乎整齐地集成到Laravel和广泛使用。
Ben Constable发来的电子邮件:
设置PHPSpec与Laravel的默认文件布局是相当困难的,我还没有弄清楚如何做到这一点。但是,您可以使用稍微不同的布局使其工作,例如:- app - Controllers - MyController.php - Models - MyModel.php - spec - Controllers - MyControllerSpec.php - Models - MyModelSpec.php
那么,在你的
phpspec.yml
中,你会有:extensions: - PhpSpecLaravelExtensionLaravelExtension 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/
。你的模型,控制器和任何将被命名空间,像:那应该能解决你的问题。顺便说一下,当我一直在做Laravel项目时,我一直把一切都放在<?php namespace Controllers; use Controller; class MyController extends Controller {}
app/src/MyVendor/MyNamespace/Controllers
等,我更喜欢作为一种布局(使源代码远离配置和其他文件,并且类似于Laravel软件包的布局)。在未来,我将尝试查看它,看看我是否可以让PHPSpec与默认的Laravel布局一起工作-如果/当我这样做时,我会在GitHub上更新项目。
对于使用Laravel 5的用户。x和PhpSpec 4。你可以调整PSR4前缀配置,以使PhpSpec与Laravel布局兼容。
我的项目使用这个配置:
suites:
app:
namespace: App
src_path: app
psr4_prefix: App
spec_prefix: classes
spec_path: specs