Jest定制变压器 - 可以改善其性能吗?

时间:2017-07-28 16:46:06

标签: jestjs

我正在使用Jest测试自定义变压器的性能。目前,变换器只会返回它从Jest获取的代码。变换器已实现getCacheKey功能。

这里是变压器的整个代码:

function process(src, path, config, transformOptions) {
  return src;
}
exports.process = process;

function getCacheKey(fileData, filePath, configStr, options) {
  return crypto.createHash('md5')
    .update(fileData + filePath + configStr, 'utf8')
    .digest('hex');
}
exports.getCacheKey = getCacheKey;

Link to the transformer

package.json中的jest配置如下:

"jest": {
  "transform": {
    "^.+\\.tsx?$": "<rootDir>/ts-transformer.js"
  },
  "testMatch": [
    "<rootDir>/test-jest/**/*.ts"
  ],
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "json"
  ]
}

Link to package.json

使用Jest测试此设置时,使用和不使用--no-cache(大约9秒)需要相同的时间

使用Mocha测试此设置时,第一次运行大约需要7秒,后续运行大约需要4秒。

在这两种情况下(使用jest和mocha),后续运行都在不更改任何源或测试文件的情况下进行了测试。

我的问题:

  • 由于缓存,后续的Jest运行是否应该更快?
  • 变压器中是否存在阻碍测试持续时间改善的内容?
  • Jest是否会产生最小的开销,这会使这个问题蒙上阴影?

1 个答案:

答案 0 :(得分:0)

单独更新片段(fileData,filePath,configStr)可能会更快,因此不必在串联上复制文件内容。

function getCacheKey(fileData, filePath, configStr, options) {
    const hash = crypto.createHash('md5');
    hash.update(fileData);
    hash.update(filePath);
    hash.update(configStr);
    return hash.digest('hex');
}

注意:如果未提供编码,并且数据是字符串,则编码为“utf8&#39;是强制执行。