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

Discourse 拥有针对核心、插件和主题的大量前端测试。一旦你搭建好了本地开发环境,就可以通过多种方式在本地运行这些测试。

在浏览器中运行测试

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

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

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

: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>]"

本文档受版本控制 - 欢迎在 GitHub 上提出修改建议。

19 个赞