lucatume/codeception-setup-local

为Codeception提供的灵活本地设置

1.0.3 2017-06-01 09:49 UTC

This package is auto-updated.

Last update: 2024-09-07 19:52:13 UTC


README

额外的命令可以使团队之间更容易地本地设置Codeception。

安装

composer require --dev lucatume/codeception-setup
  • codeception.yml文件中将命令添加到Codeception扩展中
extensions:
    commands:
        - tad\Codeception\Command\SearchReplace
        - tad\Codeception\Command\Setup

用法

这两个命令都将可在codecept CLI工具中使用

codecept search-replace foo bar some-source-file some-destination-file
codecept setup ./setup.yml

两个命令都支持--save-config选项;当使用时,运行命令指定的任何选项的值将被写入到commands-config.yaml文件。
在随后的运行中,任何未指定值的选项将默认为存储的值;这仅适用于选项(--option-name格式)值,每次运行命令时都需要指定参数。

search-replace

简单来说,这个命令将替换文件中的字符串实例,并可以选择将结果重写回同一文件或输出到指定的输出文件。
使用这个命令,可以自动化共享用于设置固定值的文件,从而实现这些固定文件的“本地化”。
例如,一个团队可能共享一个用于在分发格式中设置验收测试的数据库转储;需要为团队成员中的每个人定制数据库转储,替换其中的一些值。
以下命令将替换dump.sql文件中所有http://site.local实例为http://localhost:8080

codecept search-replace http://site.local http://localhost:8080 ./tests/_data/dump.sql

为了避免修改一个公共源文件,可以指定一个可选的输出文件,如下所示

codecept search-replace http://site.local http://localhost:8080 ./tests/_data/dump.dist.sql ./tests/_data/dump.sql

该命令是无文件感知的,可以用于任何文件;以下也是一个合法的使用示例

codecept search-replace http://site.local http://localhost:8080 ./tests/acceptance.suite.dist.yml ./tests/acceptance.suite.yml

如果在循环中使用,某些源文件可能缺失;在这种情况下,可以使用--skip-if-missing选项来避免在源文件缺失时出现错误

FILES="./tests/_data/dump1.sql
./tests/_data/dump2.sql
./tests/_data/dump3.sql"

for f in $FILES
do
    codecept search-replace http://site.local http://localhost:8080 $f --skip-if-missing
done

setup

在团队共享的同一行上,可能需要更复杂的设置程序来设置本地、可使用和定制的测试环境。
虽然始终可以选择在存储库中嵌入shell脚本,但setup尝试通过Yaml配置文件来减少所需的知识。
如果没有指定要使用的配置文件,则命令将尝试在项目根目录中查找setup.yml文件

codecept setup

可以使用可选参数指定要使用的配置文件

codecept setup local-setup-config.yml

一个基本的本地设置配置文件可能如下所示

foo:
    var:
        name: first
        question: First var value?
        default: 23
    message: Var value is \$first

控制台命令输出将如下所示

> Configuring "foo"...
> First var value? (23) // user inputs 'bar' and presses Enter
> Var value is bar

if setup指令

任何指令都可以使用简单的ifunless语法条件执行。
if条件将确保在指定的条件为真时执行指令;unless条件将确保在指定的条件为假时执行指令。
两种情况下的条件语法是

<var> (is|not) <value>

以下配置文件将在“show”变量不为“no”时显示消息“Hello world”。

Show:
    var:
        name: show
        question: Show the message?
        validate: yesno
        default: yes
    message:
        unless: show is no
        value: Hello world

这等价于

Show:
    var:
        name: show
        question: Show the message?
        validate: yesno
        default: yes
    message:
        if: show not no
        value: Hello world

条件也可以是一个存在性条件,检查变量是否为空或非空

Show:
    var:
        name: show
        question: Show the message?
        validate: yesno
        default: yes
    message:
        if: show
        value: Hello world

for循环设置指令

messagecommandexec都支持for参数。
此参数允许指令根据用户输入或硬编码的变量重复执行任意次数。
以下设置说明将在根目录中创建3个文件

foo:
    exec:
        for: fileName in one,two,three
        value: touch $fileName.txt

字符串 one,two,three 代表一个以逗号分隔的值数组。格式允许在逗号周围有空格以改善可读性;下面的设置文件

foo:
    message:
        for: name in John, Marc, Daniel
        value: Hello $name!

将输出

你好,约翰!你好,马克!你好,丹尼尔!

变量也可以在for循环中使用,但这些必须是整数值

foo:
    var:
        name: times
        validate: int
        default: 3
        question: How many times to loop?
    message:
        if: times
        for: i in times
        value: Loop run $i

将输出,假设用户输入为 4

循环运行 1 循环运行 2 循环运行 3 循环运行 4

请注意,循环对人类友好,从 1 开始,而不是开发者习惯的 0

var

请用户输入变量值 存储变量值。
在第一种情况下,所需的 var 指令字段为

  • name - 变量在设置文件中引用的名称
  • question - 将提示用户输入变量值的提问

如果目的是存储用于以后使用的值,则所需的字段为

  • name - 变量在设置文件中引用的名称
  • value - 应该存储在变量中的值

可选参数包括

  • default - 如果用户没有提供任何值(按Enter键而不输入任何内容),则变量默认值
  • validate - 变量应该验证的类型;命令将不断提示用户输入有效值,直到用户输入它;支持的类型有 intfloatboolurlemailyesno
    此外,还提供了 regexp 验证模式,支持默认的PHP验证。
break

如果需要停止 setup 执行,则可以使用 break 指令。
指令有两个参数

  • ifunless 条件 - 是否停止执行;必需
  • value - 执行停止前要显示的消息;可选

示例用法

config-name:
    var:
        name: stop
        question: stop?
        validate: yesno
    break:
        if: stop
        value: Stopped.
    message: Will not see this.
message

向用户显示消息。
消息可以是单行参数,如下所示

config-block:
    message: Hello world!

或多行参数,以允许指定条件

config-block:
    message:
        if: someVar is yes
        value: Hello world!

在后一种情况下,需要 value 参数。
可以使用 $varName 语法在 message 中替换之前获取的变量值

config-block:
    var:
        name: yourName
        question: What's your name?
        default: Luca
    message:
        if: yourName
        value: Hello $yourName!
command

运行在 codecept CLI 工具上注册的子命令;一个例子是上面提到的 search-replace 子命令。
command 指令可以是单行指令

config-block:
    command: search-replace foo bar ./tests/_data/dump.dist.sql ./tests/_data/dump.sql

如果需要指定条件,则可以是多行指令

config-block:
    var:
        name: runCommand
        validate: yesno
        default: yes
        question: run the command?
    command:
        if: runCommand is yes
        value: search-replace foo bar ./tests/_data/dump.dist.sql ./tests/_data/dump.sql 

可以使用 $varName 语法在 command 指令中替换之前获取的变量值

config-block:
    var:
        name: domain
        validate: url
        default: http://local.dev
        question: local development domain?
    command: search-replace http://dist-domain.dev $domain ./tests/_data/dump.dist.sql ./tests/_data/dump.sql 
exec

使用PHP exec() 函数运行脚本。
exec 指令可以是单行指令

config-block:
    exec: touch somefile.txt

如果需要指定条件,则可以是多行指令

config-block:
    var:
        name: runExec
        validate: yesno
        default: yes
        question: touch somefile.txt?
    exec:
        if: runExec is yes
        value: touch somefile.txt 

可以使用 $varName 语法在 exec 指令中替换之前获取的变量值

config-block:
    var:
        name: fileName
        default: someFile
        question: filename?
    exec: touch $fileName.txt 

setup:scaffold

虽然可以轻松创建可消耗的 setup 命令文件,但 setup:scaffold 命令的诞生是为了提供一个快速起点。
由于项目无关,它应该在本地测试环境设置完成后使用。
命令允许一些选项

  • --destination - 默认情况下,命令将把设置文件写入项目根目录中的 setup.yml 文件:相对路径将从项目根目录解析。
  • --skip-suites - 默认情况下,如果不存在,则命令将生成每个套件配置文件(*.suite.yml)的分发版本:使用此选项来跳过它。
  • --yes - 对命令所需的确认请求回答 y