majisti/boilerplate

一个全栈模板,包括Symfony、Behat、Codeception、React & Redux以及Webpack,全部在Docker环境下运行。它甚至还包括示例!

安装: 11

依赖者: 0

建议者: 0

安全: 0

星标: 12

关注者: 6

分支: 4

开放问题: 1

类型:项目


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
    • 拆分对子 [待办事项]
    • 下注 [待办事项]
    • 持久化游戏 [待办事项]
    • 统计数据 [待办事项]

21点游戏

这个模板包含一个21点游戏,可以在Symfony控制台中玩。它是为了展示全栈测试技术而编写的。

  • Behat用于测试控制台命令
  • Codeception用于在组件级别进行测试。这是我们测试规则边缘情况的测试。
  • PHPUnit用于单元测试
  • Mockery用作模拟框架
  • Hamcrest用作断言库
  • AspectMock用于测试一些随机性(例如PHP的rand函数)

这里有一张小截图

alt text

已知问题

  • 步骤调试:当使用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:808081:80

完成此操作后,您只需运行

make clean && make

添加到您的 /etc/host 文件

127.0.0.1   majisti.skeleton

##用法

  • http://majisti.skeletonhttp://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下运行单元测试

  1. Settings > PHP下配置一个新的本地PHP解释器,指向bin/php7-docker-ide
  2. 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)。