majisti / boilerplate
一个全栈模板,包括Symfony、Behat、Codeception、React & Redux以及Webpack,全部在Docker环境下运行。它甚至还包括示例!
Requires
- php: >=7.0
- doctrine/doctrine-bundle: ^1.6
- doctrine/doctrine-cache-bundle: ^1.2
- doctrine/orm: ^2.5
- incenteev/composer-parameter-handler: ^2.0
- jasonlewis/expressive-date: ~1.0
- myclabs/php-enum: ~1.4
- oneup/flysystem-bundle: ~1.3
- sensio/distribution-bundle: ^5.0
- sensio/framework-extra-bundle: ^3.0.2
- symfony/monolog-bundle: ^2.8
- symfony/swiftmailer-bundle: ^2.3
- symfony/symfony: 3.0.*
Requires (Dev)
- behat/behat: ~3.0
- behat/mink: ~1.7
- behat/mink-browserkit-driver: ~1.3
- behat/mink-extension: ~2.1
- behat/mink-selenium2-driver: ~1.3
- behat/symfony2-extension: ~2.1
- behatch/contexts: ~2.3
- codeception/aspect-mock: ~2.0
- codeception/codeception: ~2.1
- fabpot/php-cs-fixer: ~1.11
- fzaninotto/faker: ~1.5
- mockery/mockery: dev-master as 0.9.x-dev
- phpunit/phpunit: ~5.4
- polishsymfonycommunity/symfony-mocker-container: ~1.0
- polishsymfonycommunity/symfony2-mocker-extension: ~2.0
- sensio/generator-bundle: ^3.0
- sensiolabs/behat-page-object-extension: ^2.0
This package is not auto-updated.
Last update: 2024-09-14 19:37:00 UTC
README
这是Majisti的脚手架项目。我们在这里用它来启动项目。这不仅仅是一个生成器,这是一个集中知识的地方,用于创建具有PHP后端和前端(JavaScript、SCSS等)的丰富应用程序。
以下是一切开箱即用的东西
- Symfony 3设置
- 完整的测试套件已配置。接受、功能、集成和单元测试
- 所有内容都在Docker下运行。最小全局项目依赖:git、docker和docker-compose。
- Gulp与SCSS、Bourbon和Susy用于前端。
- 所有内容都在Makefile下运行,并准备好持续集成
- 请关注React & Redux模板
路线图
短期
- 代码覆盖率
- SCSS样式检查
- JavaScript样式检查
长期
- 安装程序
- React/Redux脚手架
实验
- PHPSpec [已拒绝] 由于在Intellij中代码补全不足,我们放弃了PHPSpec,转而使用Codeception和Mockery。尽管我们更喜欢PHPSpec来编写更短的测试,但开发测试时我们仍然处于盲点,需要阅读文档。
- 保龄球案例
- 游戏得分计算 [完成 & 自动测试]
- 带有Dunglas API的API [待办事项]
- ...
- 21点游戏
- 您可以在Symfony控制台中玩21点游戏!只需运行命令
docker-compose run --rm php bin/console majisti:game:blackjack
- 拆分对子 [待办事项]
- 下注 [待办事项]
- 持久化游戏 [待办事项]
- 统计数据 [待办事项]
- 您可以在Symfony控制台中玩21点游戏!只需运行命令
21点游戏
这个模板包含一个21点游戏,可以在Symfony控制台中玩。它是为了展示全栈测试技术而编写的。
- Behat用于测试控制台命令
- Codeception用于在组件级别进行测试。这是我们测试规则边缘情况的测试。
- PHPUnit用于单元测试
- Mockery用作模拟框架
- Hamcrest用作断言库
- AspectMock用于测试一些随机性(例如PHP的rand函数)
这里有一张小截图
已知问题
- 步骤调试:当使用Mockery时,XDebug的路径映射失败。
安装
Docker & docker-compose
为了在不使用全局依赖项的情况下设置此项目,请使用docker和docker-compose。
设置
确保您的nginx代理始终在启动时启动
docker run -d -p 80:80 --restart=always -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
注意:如果您已经使用了端口80或8080,则可能需要使用 8080:80 或 8081:80。
完成此操作后,您只需运行
make clean && make
添加到您的 /etc/host
文件
127.0.0.1 majisti.skeleton
##用法
- 在
http://majisti.skeleton
或http://majisti.skeleton:port
(如果您使用了不同的端口)上浏览站点。 - 您还可以使用
sh tmux.sh
启动tmux终端
持续集成
要运行整个设置并执行测试: make ci
使用行为驱动开发进行测试
您可以使用 make test
运行所有测试。这将运行整个测试金字塔,包括接受、功能、集成和单元测试
该项目设置为使用BDD技术进行测试。它远非完美,但将BDD引入代码库是一项努力。安装的工具如下
Codeception
-
Codeception是一个全栈测试框架。它用于在单元和组件级别进行SpecBDD。
-
尽管模拟对象更容易,但我们决定忽略PHPSpec,因为目前没有与PHPStorm兼容的工作插件。没有提供代码补全,这使得了解可用的模拟方法变得更加困难。
-
Hamcrest用于使测试更容易阅读。
-
Mockery用于测试对象之间的交互并模拟它们。
Codeception适用于
- 使用PHPUnit进行单元测试
- 组件测试(多个类和Symfony服务协同工作以提供功能)
Behat
Behat用于StoryBDD和功能测试。应用程序可以使用以下之一:- Symfony2 BrowserKit - PhantomJs - Firefox - Chrome
在验收和功能级别。Gherkin用于编写故事。
Behat适用于
- 测试包含JavaScript的网页。不要尝试直接测试您的JavaScript(Mocha和Chai会更好)
- Symfony命令行测试
- 功能测试(测试页面是否工作)
使用BrowserKit运行功能测试(最快,但不支持JavaScript)
docker-compose run --rm php bin/behat -vvv
在真实浏览器中运行功能测试
docker-compose run --rm php bin/behat -vvv -p firefox
docker-compose run --rm php bin/behat -vvv -p chrome
在phantomjs中运行功能测试
docker-compose run --rm php bin/behat -vvv -p phantomjs
截图
- 截图将在具体项目中的
var/logs/screenshots/screenshot.png
生成 - 截图将根据配置文件命名空间,例如
firefox_homepage.png
。 - 每次场景失败时都会生成一个截图
- 使用BrowserKit时截图将无法工作,它们仅适用于PhantomJs、Firefox和Chrome
在IntelliJ下运行单元测试
- 在
Settings > PHP
下配置一个新的本地PHP解释器,指向bin/php7-docker-ide
- 在
Settings > PHP > PHPUnit
下配置- 使用自定义自动加载器,使用
vendor/autoload.php
- 使用可选配置文件,位于
./phpunit.xml.dist
- 使用自定义自动加载器,使用
代码样式
您可以通过运行make cs
进行dry-run来检查您的PHP代码,或者如果您想自动修复代码,则可以运行make cs-fix
调试
如果您想启用XDebug,请使用XDEBUG环境变量运行您的命令:XDEBUG=1 docker-compose ...
如果您想始终启用XDebug,请将以下行添加到您的docker-compose.override.yml
fpm: environment: XDEBUG: 1 XDEBUG_CONFIG: idekey=PHPSTORM remote_host=YOUR_HOST_IP PHP_IDE_CONFIG: serverName=MAJISTI_SKELETON tools: environment: XDEBUG: 1 XDEBUG_CONFIG: idekey=PHPSTORM remote_host=YOUR_HOST_IP PHP_IDE_CONFIG: serverName=MAJISTI_SKELETON
其中YOUR_HOST_IP是主机的IP(不是用于docker的VM的IP)。
现在,为了使PHPStorm中的步骤调试工作,您必须执行以下操作
- 进入设置 > 语言和框架 > PHP > 调试,并将端口更改为7500
- 单击监听PHP调试连接按钮。图标在右上角,看起来像一部电话。
- 在PHP > 服务器中添加一个名为CUBE_API的新服务器。您还必须设置路径映射。您必须将项目指向映射到/var/www/html
在命令行中运行您的代码将在您放置断点的行上停止。要在浏览器中进行调试,您必须安装Chrome XDebug Helper扩展。安装后,您可以单击它并选择“调试”。您的代码将在该行停止。
注意:目前,使用bin/test_env.sh进行步骤调试不会工作。您需要使用docker-compose run --rm php bin/codecept -v run
IntelliJ
插件
- Symfony插件
- PHP Toolbox 提供了更多的 PHP 代码自动完成功能。目前,已经为 Mockery 添加了代码自动完成(请参阅 php-toolbox/mockery)。