最近基本所有的项目都开始使用 ES6 语法来写。一是因为很多 ES6 语法确实简洁很多(如箭头函数),二是因为向 ES5 甚至 ES3 兼容的 transpiler 都比较成熟,不用担心兼容性的问题。
但是最近在用 ES 6 写测试代码时,chai 会报如下错误:
1 | TypeError: Unable to access callee of strict mode function |
经过一番研究我发现如下几个点:
- chai 不支持 strict mode
- Babel 在将 ES6 module 转换为 ES5 时会自动添加
"use strict";
指令(这也是 ES 6 的规范)
因为我的测试代码也是用 ES 6 编写,Babel 在转换时给测试代码添加了严格模式的指令,导致 chai 的 expect 方法报错了。
解决方法比较简单:
- 在使用 Babel 转换 ES6 代码时可以传入参数
{blacklist: strict}
,如果使用命令行,可以使用babel xxx.js --blacklist=strict
(在正常的业务代码中不建议使用该参数) - 如果使用了 Webpack 或 Browserify,要在配置文件中忽略掉
node_modules
文件夹
最近工作繁忙,博客更新的太慢……