Discourse 针对核心功能、插件和主题提供了广泛的前端测试。一旦您拥有了可用的本地开发环境,就可以通过多种不同方式在本地运行这些测试。
在浏览器中运行测试
核心 / 插件: 访问您开发环境中的 /tests
主题: 访问您开发(或生产)环境中的 /theme-qunit,然后选择主题
通常,在处理核心测试时,您应在“Target”(目标)下拉菜单中选择“core”,而在处理插件时,则应选择特定的插件。
不幸的是,截至撰写本文时,我们测试中的内存泄漏问题意味着尝试在单个浏览器中运行整个测试套件往往会达到浏览器内存限制。要在多个浏览器中并行运行整个测试套件,请查看下面的 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
![]()
--filter参数会传递给 QUnit:普通值作为不区分大小写的子字符串进行匹配,而像/foo/i这样用斜杠包裹的值则作为正则表达式进行匹配。若要正则表达式进行不区分大小写的匹配,请包含i标志。
插件
从 Discourse 的根目录:
bin/qunit plugins/chat/test/javascripts/unit/lib/chat-audio-test.js # 运行单个文件
bin/qunit plugins/chat/test/javascripts/unit # 运行目录
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 上建议更改。