运行自动化的 JavaScript 测试¶
SpiderMonkey 使用两个独立的测试套件。
该 Test262 测试套件 是 ECMA-262(JavaScript 语言规范)的实现一致性测试套件。所有 JavaScript 引擎都使用 Test262 来确保它们正确地实现了 JavaScript。Test262 使用 mach jstests
运行。
除了 Test262 之外,SpiderMonkey 还拥有大量内部测试。这些测试使用 mach jit-test
运行。
这两套测试都可以在 JS shell 的普通构建版本中运行。
本地运行 Test262¶
jstests shell 框架位于 js/src/tests/jstests.py
中。可以使用以下命令调用它:
./mach jstests
请注意,mach 通常会找到 JS shell 本身;可以使用 –shell 参数手动指定位置。所有其他标志都将传递给框架。
Test262 包含大量测试。在处理特定功能时,指定测试子集通常很有用
./mach jstests TEST_PATH_SUBSTRING [TEST_PATH_SUBSTRING_2 ...]
这将运行路径包含任何 TEST_PATH_SUBSTRING 的所有测试。要排除测试,可以使用 --exclude=EXCLUDED
选项。其他有用的选项包括
-s
(--show-cmd
):显示用于运行每个测试的确切命令行。-o
(--show-output
):打印每个测试的输出。--args SHELL_ARGS
:传递给 JS shell 的额外参数。--rr
在 rr 记录和回放调试器下运行测试。
有关选项的完整列表,请使用
./mach jstests -- -h
Test262 测试也可以在浏览器中运行,使用
./mach jstestbrowser
要运行特定测试,可以使用 --filter=PATTERN
选项,其中 PATTERN 是一个 RegExp 模式,该模式针对 file:///{PATH_TO_OBJ_DIR}/dist/test-stage/jsreftest/tests/jsreftest.html?test={RELATIVE_PATH_TO_TEST_FROM_js/src/tests}
进行测试。
出于历史原因,jstests
还包含一个 SpiderMonkey 特定的附加语言特性测试套件,位于 js/src/tests/non262
中。
本地运行 jit-tests¶
jit-test shell 框架位于 js/src/jit-test/jit_test.py
中。可以使用以下命令调用它:
./mach jit-test
mach jit-test
的基本用法类似于 mach jstests
。可以指定测试的子集
./mach jit-test TEST_PATH_SUBSTRING [TEST_PATH_SUBSTRING_2 ...]
--jitflags
选项允许您使用不同的标志测试 JS 可执行文件。这些标志用于控制运行哪些功能,例如启用哪些 JIT 以及它们启动的速度。有效选项是名为 bundle 的,如 'all'、'interp'、'none' 等。在 -h
/ --help
输出中查看完整列表。
另一个特定于 jit-tests
的有用选项是 -R <filename>
(或 --retest <filename>
)。第一次运行时,它会运行整个测试套件并将失败测试的列表写入给定的文件名。下次运行时,它将只运行给定文件名中的测试,然后在完成时将写入失败测试的列表。因此,您可以继续在修复错误时重新测试,并且只运行上次失败的测试,从而加快速度。
其他有用的选项包括
-s
(--show-cmd
):显示用于运行每个测试的确切命令行。-o
(--show-output
):打印每个测试的输出。--args SHELL_ARGS
:传递给 JS shell 的额外参数。--debug-rr
在 rr 记录和回放调试器下运行测试。--cgc
使用频繁的压缩 GC 运行测试(相当于SM(cgc)
)。
添加新的 jit-tests¶
为 jit-tests 创建新测试很容易。只需在 js/src/jit-test/tests
下的适当目录中添加一个新的 JS 文件。(默认情况下,测试应该放在 test/basic
中。)测试框架会自动找到测试并运行它。如果 JS shell 的退出代码为零(即 JS 没有崩溃并且没有 JS 错误),则认为测试通过。使用 assertEq
函数验证测试中的值。
测试有一些高级选项。有关详细信息,请参阅自述文件(位于 js/src/jit-tests
中)。
在 Treeherder 上运行 jstests¶
在 Treeherder 上,在浏览器中运行的 jstests 显示为 R(J)
(在 mach try fuzzy
中搜索 jsreftest
)。SpiderMonkey shell 作业显示为 SM(...)
;其中大多数包括 jstests 和 jit-tests 的 JS shell 运行。