我一直在比较函数式范例和面向对象范例。
作为其中的一部分-我想做一些性能测试。
我有一些测试,现在看起来像这样:
it("Some long running performance test", () => {
const result = myFunctionWithLotsOfData();
});
现在,我只是打印这段代码运行的时间(大约5000 ms)。
我喜欢将Jest用于它提供的所有Assert和模拟功能,以及它的实时重载等。
但是,我不希望一直进行这些测试,我会运行create一个npm脚本,如npm test:performance
,并且仅在存在环境变量或类似环境变量时才运行这些测试。
做这件事的最好方法是什么?
4条答案
按热度按时间628mspwn1#
pxy2qtax2#
与公认答案的思路相同:
j2datikz3#
这是对已接受帖子的一个小改动,但如果我们将Jest的
test.skip(...)
与现代JS由于spread operator而允许的那种盲参数转发结合起来,我们可以得到一个更干净的解决方案,有条件地运行测试,同时让Jest知道它跳过了一些“官方方式”的东西,而不需要“functionfunction”调用:这是 typescript 版本
一半的时间这将运行为:
一半的时间它会显示:
但是为了涵盖似乎没有人在他们的答案中包含的部分,我们可以将其与“查看
process.argv
的运行时标志”结合起来,从而跳过长时间运行的测试:然后我们可以把这个运行时标志放到npm脚本中,但是,我们需要确保把这个标志转发到我们的脚本中,而不是转发到jest或npm中:
这看起来有点奇怪,而且确实有点奇怪,但这是参数转发在npm脚本中工作的结果:
1.第一个
--
告诉 npm 它需要转发后面的内容,而不是解释该标志本身(实际上:这使得NPM运行jest somedir -- --run-long
)。1.第二个
--
告诉 jest,它需要转发后面的内容,而不是将其视为自身的运行时标志,以便 * 我们的脚本 * 能够在其process.argv
列表中看到它(因此我们调用ourscript --run-long
)。一个常见的错误是忘记了第二个
--
,这将导致一个有趣的错误,它不会告诉您忘记了两个破折号,并且根本没有测试运行。brccelvz4#
这里有一个解决方案,创建
itif
函数,这样我们就可以根据一些条件运行单元测试。例如,
itif
函数:单元测试:
当
process.env.PERFORMANCE_TEST
环境变量的值等于'true'
时运行单元测试,结果为:在未设置
process.env.PERFORMANCE_TEST
环境变量的值时,不要运行单元测试: