使用 Test262 的正确姿势

使用 Test262 的正确姿势

Test262 是一套由 TC39 制定的标准化 ECMAScript 规范测试集。Test262 促成我们在不同的 JavaScript 运行环境中同样的 JavaScript 代码都能获得预期的同样结果,也将 JavaScript 语言的语义细节都使用避免歧义的标准文本在规范中详细地记录了下来,让我们更加容易理解 JavaScript 的行为。如果你不了觉 TC39 与 ECMAScript 的相关信息,可以看我之前写过的一篇文章 《TC39 与 ECMAScript 提案》

基本用法

1
2
3
4
5
# 拉取代码
$ git clone https://github.com/tc39/test262.git

# 安装命令行工具
$ npm i -g test262-harness

所有的测试集都在 /test 目录,命令行只需要指定 JS 引擎和测试路径即可,比如现在我想测试一下 node 对内置对象 BigInt 的支持情况,我可以在 test262 项目下执行:

1
2
3
4
5
6
7
8
$ test262-harness \
--hostType=node \
--hostPath=`which node` \
test/built-ins/BigInt/**/*.js
'''
Ran 146 tests
146 passed
0 failed

测试 JS 引擎

下面是支持的 hostType:

Host Name Type Supported Platforms
ch¹ ChakraCore CLI Any
d8¹ V8 CLI Any
engine262 Engine262 CLI Any
graaljs GraalJS CLI Any
jsshell¹ SpiderMonkey CLI Any
jsc¹ JavaScriptCore CLI Mac²
nashorn Nashorn CLI Any
node Node.js CLI Any
qjs4 QuickJS CLI Any
xs Moddable XS CLI Any
chrome Google Chrome Browser Any
edge Microsoft Edge Browser Windows
firefox Mozilla Firefox Browser Any
safari Apple Safari Browser Mac

详情见 eshost

测试 Polyfill

例如你要实现一个 Promise 的 Polyfill:

1
2
3
4
# polyfill-promise.js
class Promise {
// ...
}

然后通过 prelude 参数调用:

1
2
3
4
5
$ test262-harness \
--hostType=node \
--hostPath=`which node` \
--prelude=/path/to/polyfill-promise.js \
test/built-ins/Promise/**/*.js
Posted on

2021-03-11

Updated on

2021-10-12

Licensed under

Comments