如何在不发出js文件的情况下用玩笑来测试未导出的打字稿功能

时间:2019-09-16 18:18:31

标签: typescript unit-testing jestjs

我有一些我想测试的未导出功能。在JavaScript中,我将使用rewire。为了使用rewire测试TypeScript,请将Optional调用指向发出的JavaScript文件而不是TypeScript文件。

但是,我正在使用webpack编译我的TS,所以在我的tsconfig.json中,我有rewire(),并且没有发出要重布线的文件。

如何测试我的未导出功能?

1 个答案:

答案 0 :(得分:0)

我想出了一个比理想情况要好但比出口要好的解决方法。

jest.config.js

module.exports = {
  // ...
  globals: {
    TEST: true,
    // ...
  }
};

global.d.ts

export {};
declare global {
  const TEST: boolean;
  // ...
}

webpack.config.js

const { DefinePlugin } = require('webpack');
module.exports = {
  // ...
  plugins: [
    new DefinePlugin({ TEST: 'false' })
  ]
};

my-module.ts

function myNonExportedFunction() {
  // ...
}

if (TEST) {
  module.exports.myNonExportedFunction = myNonExportedFunction;
}

__ tests __ / module.ts

const { myNonExportedFunction } = require('../my-module');

test('myNonExportedFunction', () => {
  // ...
});

此方法的两个缺点是:

  1. 您将在生产代码中包含最少的测试代码(尽管webpack可以基于常量删除代码)

  2. 您仍然会丢失未导出功能的强类型输入,尽管无论如何您都会丢失重新连接的类型安全性