我有一个应用程序,该应用程序包含一个Node脚本,该脚本以无头方式(Lighthouse documentation)编程运行Lighthouse v3,以测试该应用程序的性能。
我为此编写了一些Jest测试,这些测试在本地通过。测试不是在测试Lighthouse本身,而是测试Node脚本如何处理从Lighthouse返回的结果数据。因此,必须模拟Lighthouse依赖项。
在进行测试的过程中,我发现当我进行Jest测试时,由Lighthouse调用的chrome-launcher会启动。这意味着我没有正确嘲笑这种依赖关系。我认为模拟Lighthouse已经足够了,但是我对如何模拟“ thennable” chrome启动器函数感到困惑。
下面的from itertools import count, accumulate as acc, takewhile as tw
lst = [1, 2, 3, 4, 5, 6]
[lst[c:c+i] for i, c in enumerate(tw(lambda x: x < len(lst), acc(count())), 1)]
# [[1], [2, 3], [4, 5, 6]]
函数来自Lighthouse Node文档。
lighthouse.js
launchChromeAndRunLighthouse
lighthouse.test.js
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
function launchChromeAndRunLighthouse(url, opts, lConfig = null) {
return chromeLauncher
.launch({ chromeFlags: opts.chromeFlags })
.then(chrome => {
const options = { ...opts, port: chrome.port };
return lighthouse(url, options, lConfig).then(results =>
chrome.kill().then(() => results.lhr),
);
});
}
function myFunc(config) {
launchChromeAndRunLighthouse(myAppUrl, config);
// manipulates data returned from launchChromeAndRunLighthouse
return true;
}
module.exports = myFunc;
Jest的新手,对如何模拟chromeLauncher感到困惑,因此无法启动它。谢谢
答案 0 :(得分:0)
你不需要模拟 chromeLauncher,让它像它一样工作。仅仅嘲笑灯塔就足以让测试运行并通过。它在我的项目中按预期工作。