跳转到内容

测试环境


概览

历史上,Phalcon 以其相对较小的开发社区和有限的拉取请求为特征,由于开发者对框架最初编写的语言 C 的不熟悉而面临挑战。为了鼓励贡献,我们引入了Zephir,一种与 PHP 和 Javascript 语法非常相似的语言。在2003年,我们揭开了这一计划,并随后发布了该语言,将所有 Phalcon 代码迁移到 Zephir。从那时起,Zephir 成为了 Phalcon 开发的核心部分。

挑战

构建一个功能丰富的框架需要全面的支持各种功能和相关服务的开发环境。例如,验证不同数据库适配器(如,MySQL, Postgresql, Sqlite)上的 ORM 功能需要安装相关的 PHP 扩展和数据库。同样地,要执行涵盖 Phalcon 广泛功能的测试套件,开发者必须安装诸如 Redis 和 Memcached 等多个扩展和服务。

考虑到不同的 PHP 版本(如,PHP 8.0, 8.1),这些先决条件使 Phalcon 的开发变得复杂。

解决方案

过去依赖于现已停止维护的 `nanobox`,我们加大了努力,采用 Docker 来简化开发需求。只需几个命令,开发者就可以无缝地为 Phalcon 做出贡献并迅速执行测试。

这种基于 Docker 的方法简化了设置过程,确保 Phalcon 的开发更加便捷和高效。

安装

在开始之前,请确保您的机器上已安装 docker。如果尚未安装,请按照说明进行操作点击这里。此外,您还需要docker compose- 安装详情可以在这里找到点击这里.

启动开发环境

  1. 叉取仓库 首先将cphalcon仓库叉取到您的 GitHub 账户中。如果您还没有这样做,请在浏览器中导航至cphalcon页面并点击位于屏幕右上角的 Fork 按钮。

  2. 克隆叉取的仓库 将叉取的仓库克隆到您选择的目录中。下面的例子假定 GitHub 账户是niden;将其替换为您的账户。

git clone git@github.com:niden/cphalcon
  1. 构建环境 进入 cphalcon 文件夹(或您选择的仓库位置),并使用以下命令构建容器:
docker compose build 

此过程可能需要一些时间,具体取决于您的机器规格。它不需要频繁运行,仅当 Dockerfile 发生变化或您选择重新构建容器时才需要。

启动环境

构建完所有容器后,使用以下命令启动环境:

docker compose up -d

上述命令利用存储库中的docker-compose.yml文件在后台运行环境,允许您重复使用终端。要停止环境,请按下Ctrl-C如果没有使用-d标志。如果使用了-d,请通知 Docker 您希望停止环境:

docker compose down

环境配置

暴露端口

使用上述命令后,服务容器会将端口暴露给主机,如下表所示:

服务 端口
mysql 3306
postgres 5432
redis 6379

这种设置对大多数开发者来说都很方便。但是,对于同时在多个使用相同服务的项目上工作的开发者(如,mysql),这种配置可能会阻碍第二个环境的功能,因为主机上的端口已被占用。

隔离配置

或者,使用docker-compose-local.yml文件,该文件不会将服务容器的端口暴露给主机,从而确保隔离:

docker compose -f docker-compose-local.yml up -d

在这种情况下,您需要确定特定服务容器的 IP 地址以连接到它。例如,要连接到 mysql 容器:

docker inspect \
  -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
  cphalcon-mysql

确定正确的 IP 地址并相应连接:

mysql -uroot -p -h172.18.0.4

进入环境

要进入环境,请指定所需的 PHP 版本环境。有三个环境可供选择:

cphalcon-8.0 cphalcon-8.1 cphalcon-8.2

例如,要进入 PHP 8.1 环境:

docker exec -it cphalcon-8.1 /bin/bash

您将看到提示:

root@cphalcon-81:/srv#

现在您已经在环境中,具备所有必要的扩展和服务。要退出,请输入exit并按 Enter:

root@cphalcon-81:/srv# exit

别名

开发环境在.bashrc文件中位于docker/文件夹及其对应的 PHP 版本子文件夹中定义了一些预设别名。一些值得注意的别名包括:

别名 命令
g git
h history
l ls -lF ${colorflag}
ll LC_ALL="C.UTF-8" ls -alF
zephir ./zephir
zf ./zephir fullclean
zg ./zephir generate
zs ./zephir stubs
cpl zf && zg && cd ext/ && ./install && ..
codecept php -d extension=ext/modules/phalcon.so ./vendor/bin/codecept

Composer

在继续之前,请更新 Composer:

root@cphalcon-81:/srv# composer install

Composer 命令

Composer 已配置以辅助测试。请按以下方式执行命令:

composer <command>

示例:

# Run the code sniffer
composer cs
命令 描述
analyze 运行 Psalm (psalm)
cs 运行 CodeSniffer (phpcs)
cs-fix 运行 CodeSniffer fix (phpcbf)
test-unit 运行单元测试
test-cli 运行 CLI 测试
test-integration 运行集成测试
test-db-common 运行通用数据库测试
test-db-mysql 运行 MySQL 数据库测试
test-db-pgsql 运行 pgsql 数据库测试
test-db-sqlite 运行 sqlite 测试
test-db 运行所有数据库测试
test-all 运行所有测试

检查 Zephir

Zephir是否通过composer安装。确保通过执行以下命令安装最新版本:

root@cphalcon-81:/srv# zephir
输出应类似于文档中提供的格式化屏幕。

编译 Phalcon

使用 Zephir 编译 Phalcon:

root@cphalcon-81:/srv# cpl

检查扩展

通过输入以下内容来验证扩展是否正确安装:

root@cphalcon-81:/srv# php -m

检查已安装模块列表中是否存在 phalcon。

设置数据库

在项目根目录创建一个.env文件:

root@cphalcon-81:/srv# cp tests/_config/.env.docker .env

运行测试

单元

在运行单元测试之前,构建Codeception基础类:

root@cphalcon-81:/srv# codecept build

运行单元测试:

root@cphalcon-81:/srv# test-unit
从特定文件夹执行测试:

root@cphalcon-81:/srv# codecept run tests/unit/some/folder/
执行单个测试:

root@cphalcon-81:/srv# codecept run tests/unit/some/folder/some/test/file.php

数据库

使用别名运行与数据库相关的测试:

root@cphalcon-81:/srv# test-db-common
root@cphalcon-81:/srv# test-db-mysql
root@cphalcon-81:/srv# test-db-pgsql
root@cphalcon-81:/srv# test-db-sqlite
root@cphalcon-81:/srv# test-db       

开发

打开你常用的编辑器,并开始用Zephir进行开发。对于任何更改.zep文件(在phalcon文件夹内),重新编译扩展:

root@cphalcon-81:/srv# cpl
更改后运行测试:

root@cphalcon-81:/srv# codecept run tests/unit/somefolder/somecestfile:sometest
关于Zephir文档,请参考Zephir Docs网站。

服务

可用的服务包括:

  • Memcached
  • MySQL
  • PostgreSQL
  • Redis

已启用的PHP扩展包括:

  • apcu
  • ctype
  • curl
  • dom
  • fileinfo
  • gd
  • gmp
  • gettext
  • imagick
  • iconv
  • igbinary
  • intl
  • json
  • memcached
  • mbstring
  • mongodb
  • opcache
  • phar
  • pdo
  • pdo_mysql
  • pdo_pgsql
  • pdo_sqlite
  • redis
  • session
  • simplexml
  • sqlite3
  • tokenizer
  • yaml
  • zephir_parser
  • xdebug
  • xml
  • xmlwriter
  • zip
  • zlib

数据库备份位于tests/_data/assets/schemas

如有疑问,请加入Discord服务器或我们的讨论.

<3 Phalcon 团队

无噪 Logo
无噪文档
25 年 6 月翻译
文档源↗