如何运行 Discourse 核心、插件和主题的 QUnit 测试套件

Discourse 拥有针对核心功能、插件和主题的广泛前端测试。一旦你拥有了一个可用的本地开发环境,就可以通过多种不同的方式在本地运行这些测试。

在浏览器中运行测试

核心 / 插件: 在你的开发环境中访问 /tests

主题: 在你的开发(或生产)环境中访问 /theme-qunit,然后选择主题

通常,在编写核心测试时,你应该启用“跳过插件”(Skip Plugins);而在编写插件测试时,你应该从下拉列表中选择特定的插件(这将自动“跳过核心”)。当启用插件时,核心测试套件通常不会通过(因为插件往往会故意改变核心行为)。

:information_source: 不幸的是,在撰写本文时,测试中的内存泄漏意味着尝试在单个浏览器中运行整个测试套件往往会达到浏览器内存限制。要在多个浏览器中并行运行整个测试套件,请查看下面的 CLI 示例。

在 CLI 中运行测试

核心

从 Discourse 的根目录开始,使用 bin/qunit(请确保自上次拉取上游更改以来,你已经运行了 pnpm install)。它封装了 Ember Exam 以实现随机化和并行化,默认情况下针对正在运行的 Rails 服务器和现有的 JS 资源进行运行。运行 bin/qunit --help 可查看完整选项列表。

以下是一些有用的示例:

# 运行单个测试文件,或目录中的所有测试:
bin/qunit frontend/discourse/tests/integration/components/bookmark-test.gjs
bin/qunit frontend/discourse/tests/integration/components

# 在 5 个无头 Chrome 实例中并行运行整个核心测试套件:
bin/qunit --parallel 5

# 运行所有“模块:测试名称”包含子字符串的测试(不区分大小写):
bin/qunit --filter "Integration | Component | bookmark"

# 使用斜杠包裹值以使用正则表达式进行匹配,例如用于交替匹配:
bin/qunit --filter "/bookmark|reaction/i"

# 启动一个隔离的服务器并在可见的浏览器中运行,以便于调试:
bin/qunit --standalone --no-headless

:information_source: --filter 参数会转发给 QUnit:普通值作为不区分大小写的子字符串进行匹配,而像 /foo/i 这样用斜杠包裹的值则作为正则表达式进行匹配。包含 i 标志以进行不区分大小写的正则表达式匹配。

插件

从 Discourse 的根目录开始:

bin/rake "plugin:qunit" # 运行所有插件的 qunit 测试
bin/rake "plugin:qunit[discourse-chat-integration]" # 运行单个插件的 qunit 测试

主题

从 Discourse 的根目录开始:

bin/rake "themes:qunit[url,<theme_url>]"
bin/rake "themes:qunit[name,<theme_name>]"
bin/rake "themes:qunit[id,<theme_id>]"

本文档受版本控制 - 建议修改 on github

19 个赞