thunder/drupal-testing

用于测试 Drupal 项目的脚本。


README

Build Status

版本

Latest Stable Version Latest Unstable Version

关于

使用此包简化您的 Drupal 项目的测试。这将运行所有标准 Drupal 测试,并额外检查您的源代码是否符合 Drupal 编码风格指南。它可以用于在本地运行这些测试,或在 Travis 或 GitHub Actions 等持续集成平台上。

先决条件

要充分利用此包,您应该考虑向您的模块添加一些内容。

将您的模块名称添加到测试类的 @group 注释中。

如果您的模块名称为 "my_module",请将以下注释添加到您的测试类中

/**
 * Tests for my_module.
 *
 * @group my_module
 */
class MyModuleTest extends ...

为您的模块添加一个 composer.json 文件。

我们使用该文件来自动化不同的任务。我们从其中解析模块名称,并在运行测试之前自动下载所需的 Drupal 模块。

composer.json 可能如下所示

{
    "name": "drupal/my_module",
    "description": "The description of my_module",
    "type": "drupal-module",
    "license": "GPL-2.0-or-later",
    "require": {
        "drupal/another_module": "^2.0"
    }
}

不要使用已弃用的 TestBase 类

只有未弃用的(截至 Drupal 8.6)TestBase 类被测试。特别是已弃用的 JavascriptTestBase 不受支持,请使用 WebDriverTestBase 代替。请参阅 JavascriptTestBase 已弃用,由 WebDriverTestBase 取代

设置

请确保您已安装 bash 4 或更高版本。在大多数系统上都是这样。但在 MacOS 上,您需要使用 homebrew 更新内置的 bash。

其他要求

- [jq](https://stedolan.github.io/jq/)
- PHP > 7.2 + extensions needed by Drupal + sqlite extension, if no other database is used.
- [composer](https://getcomposer.org.cn/)
- [node + npm](https://node.org.cn/en/)

要在 Travis 上使用 drupal-testing,您需要做的就是将 .travis.yaml.dist 复制到您的项目根目录,并将其重命名为 .travis.yaml。如果您的模块满足所有先决条件,您应该已经完成了。否则,您可能需要提供一些环境变量。下面是可能的配置。

与 LionsAd/drupal_ti 的区别

虽然总体方法与 drupal_ti 非常相似,但我们也有一些不同之处。

  • 如果您想运行已弃用的 TestBase 类,或者想运行 behat 测试,请使用 drupal_ti。
  • 当使用 WebDriverTestBase 和 Drupal > 8.6(需要 selenium 而不是 phantom.js)时,请使用此包。
  • 如果您想使用一个简单的 travis.yml 文件,它无需任何配置即可工作,请使用此包。
  • 您可以直接使用它来快速在本地和其他 CI 环境中运行测试!只需在您的模块目录中执行 composer global require thunder/drupal-testing,将全局 composer 目录添加到您的 $PATH,并从模块目录中调用 test-drupal-project。所有内容都将自动构建、安装和测试。

配置

我们尽可能地尝试不进行配置。但如果我们需要为您的模块提供一些特殊处理,或者如果您的测试环境不是 Travis/github(或者他们更改了一些默认值),我们仍然有很多配置选项。

步骤

运行测试最简单的方法是在您的 .travis.yml 中调用 test_drupal_project。这将完成所有操作,但实际上它被分为几个步骤,可以通过提供参数单独调用这些步骤:test_drupal_project build 将调用构建步骤以及构建步骤所依赖的任何步骤。已执行的步骤在后续调用中不会被再次调用。因此,如果您接下来调用 test_drupal_project start_services,则构建步骤之前的所有步骤将不会执行。

步骤如下:

requirements

检查测试要求是否满足。

coding_style

测试 PHP 和 JavaScript 编码风格。

prepare_build

创建 Drupal 项目并修改 composer.json 以包含所需的模块。

build

使用 Drupal 项目构建 Drupal 安装,添加所有模块依赖项并调用 composer install。

install

使用最小配置文件或已配置的配置文件安装 Drupal。

start_services

启动测试所需的服务。启动 Web 服务器和 selenium。

run_tests

运行测试。

这也是步骤依赖的顺序,coding_style 依赖于 prepare,build 依赖于 coding_style 和 prepare,依此类推。

将执行分割成步骤的一个非常常见的用例是在构建步骤后停止,并添加自定义构建操作(例如,下载不能由 composer 安装的依赖项),然后稍后继续。这样一个自定义 .travis.yml 的示例如下:

language: php
sudo: required

cache:
  apt: true
  directories:
  - "$HOME/.composer/cache"
  - "$HOME/.drush/cache"
  - "$HOME/.npm"

php:
  - 7.2

branches:
  only:
    - /^8\.([0-9]+|x)\-[0-9]+\.([0-9]+|x)$/

env:
  global:
    - PATH="$PATH:$HOME/.composer/vendor/bin"

before_install:
  - composer global require thunder/drupal-testing

install:
  - test-drupal-project build
  # Download something to the ccurrent directory.
  - wget -qO- https://www.some-domain.com/some-needed-dependency.tar.gz | tar xvz

script:
  # this continues after the build step and finishes testing.
  - test-drupal-project

环境变量

您可以使用多个环境变量配置您的测试,其中大多数只在您想在不同于 travis 的环境中运行测试时需要。您可以更改数据库凭据、服务器主机和端口、一些安装路径以及测试设置。所有这些变量在通过具有正确 composer.json 和将测试组设置为模块名称的模块在 travis 上运行时应该可以正常工作(有关更多信息,请参阅先决条件)。可以在 .travis.yml 的 env 部分中设置变量。

可用变量

configuration.sh 中查找所有定义的变量

一些有趣的变量是

  • DRUPAL_TESTING_PROJECT_BASEDIR

项目所在目录。在 travis 上,这设置为 TRAVIS_BUILD_DIR,否则默认为当前目录。

  • DRUPAL_TESTING_COMPOSER_NAME

当前项目的 composer 名称,如果未指定,则从 composer.json 中读取。

  • DRUPAL_TESTING_PROJECT_NAME

项目名称,如果未提供,则使用 composer 名称的第二部分。例如,如果 composer 名称是 vendor/myproject,则项目名称将是 myproject。这将用作默认测试组。

  • DRUPAL_TESTING_TEST_GROUP

PHPUnit 测试组,默认值为 ${DRUPAL_TESTING_PROJECT_NAME}。要提供多个组,请使用逗号连接它们:DRUPAL_TESTING_TEST_GROUP="mygroup1,mygroup2"。

  • DRUPAL_TESTING_TEST_GROUP_EXCLUDE

要排除的 PHPUnit 测试组,默认为空字符串。要提供多个组,请使用逗号连接它们:DRUPAL_TESTING_TEST_GROUP_EXCLUDE="mygroup1,mygroup2"。

  • DRUPAL_TESTING_TEST_FILTER

只运行名称与给定正则表达式模式匹配的测试。示例:DRUPAL_TESTING_TEST_FILTER=TestCaseClass::testMethod

  • DRUPAL_TESTING_TEST_CODING_STYLES

布尔值,表示是否应使用 burdamagazinorg/thunder-dev-tools 测试编码风格。默认情况下,将测试编码风格。

  • DRUPAL_TESTING_TEST_JAVASCRIPT
  • DRUPAL_TESTING_TEST_PHP

布尔值,表示是否应测试 JavaScript 和 PHP 编码风格。默认情况下,将测试所有编码风格。

  • DRUPAL_TESTING_TEST_BASE_DIRECTORY

所有生成文件的基准目录。Drupal 将安装到这个目录。测试成功后,这个目录及其内容将被删除。

  • DRUPAL_TESTING_DRUPAL_INSTALLATION_DIRECTORY

Drupal 将安装的目录,默认为 ${DRUPAL_TESTING_TEST_BASE_DIRECTORY}/install。测试成功后,这个目录将被删除。

  • DRUPAL_TESTING_HTTP_HOST
  • DRUPAL_TESTING_HTTP_PORT

Web 服务器的主机和端口。默认为 127.0.0.1 和 8888。

  • DRUPAL_TESTING_SELENIUM_CHROME_VERSION

要使用的 selenium chrome docker 版本。默认为最新版本。

  • DRUPAL_TESTING_SELENIUM_HOST
  • DRUPAL_TESTING_SELENIUM_PORT

要使用的 selenium 主机和端口。默认为 Web 服务器的主机和端口 4444。

  • DRUPAL_TESTING_DATABASE_HOST
  • DRUPAL_TESTING_DATABASE_PORT
  • DRUPAL_TESTING_DATABASE_USER
  • DRUPAL_TESTING_DATABASE_PASSWORD
  • DRUPAL_TESTING_DATABASE_NAME

数据库信息。默认为 Web 服务器的主机,端口 3306,用户 testing,密码为空。数据库名为 testing。如果您在本地运行测试,可能需要将这些值修改为您的本地 MySQL 安装。

  • DRUPAL_TESTING_CLEANUP

默认情况下,所有创建的文件在测试运行成功后将被删除。您可以通过将其设置为 false 来禁用此行为。

  • SYMFONY_DEPRECATIONS_HELPER

用于忽略弃用的 symfony 环境变量,有关可能的值,请参阅 PHPUnit Bridge 文档。默认值为 "week",以忽略任何弃用通知。

  • MINK_DRIVER_ARGS_WEBDRIVER

webdriver 的驱动器参数。您可能需要在运行自己的 chromedriver / selenium 实例时更改此值。

包含一些变量设置的示例 .travis.yml

language: php
dist: xenial

php:
  - 7.2

services:
  - mysql

cache:
  apt: true
  directories:
  - "$HOME/.composer/cache"
  - "$HOME/.drush/cache"
  - "$HOME/.npm"

branches:
  only:
    - /^8\.([0-9]+|x)\-[0-9]+\.([0-9]+|x)$/

env:
  matrix:
    # Add a test matrix where tests are running once with deprecations failing and once without.
    # The test with deprecation warnings is allowed to fail.
    - SYMFONY_DEPRECATIONS_HELPER=weak
    - SYMFONY_DEPRECATIONS_HELPER=0
  global:
    - PATH="$PATH:$HOME/.composer/vendor/bin"

matrix:
  allow_failures:
    - env: SYMFONY_DEPRECATIONS_HELPER=0

before_install:
  - composer global require thunder/drupal-testing

script:
  - test-drupal-project