我有一个应用程序,其中包含一个以编程方式和无头运行 Lighthouse v3 的 Node 脚本(Lighthouse 文档)来测试应用程序的性能。
我为此编写了一些在本地通过的 Jest 测试。测试不是测试 Lighthouse 本身,而是 Node 脚本如何处理从 Lighthouse 返回的结果数据。因此,必须模拟 Lighthouse 依赖项。
在进行测试的过程中,我发现由 Lighthouse 调用的 chrome-launcher 会在我进行 Jest 测试时启动。这意味着我没有正确地嘲笑这种依赖。我认为模拟 Lighthouse 就足够了,并且已经这样做了,但我对如何模拟“thennable”chrome 启动器功能感到困惑。
下面的launchChromeAndRunLighthouse
函数来自 Lighthouse Node 文档。
灯塔.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;
lighthouse.test.js
import myFunc from './lighthouse';
jest.mock('lighthouse', () =>
jest.fn().mockResolvedValue({
lhr: {
categories: {
performance: {
id: 'performance',
score: 1,
}
},
},
}),
);
// chromeLauncher actually gets invoked by this
describe('myfunc', () => {
it('tests myfunc', async () => {
const result = await myFunc(config);
expect(result).toEqual(true);
});
});
Jest 的新手,对如何模拟 chromeLauncher 感到困惑,因此无法启动它。谢谢