У меня есть приложение, которое включает в себя скрипт Node, который запускает Lighthouse v3 программно и без помощи головы ( Документация Lighthouse ) для проверки производительности приложения.
Я написал несколько тестов Jest для этого, которые проходят локально.Тесты - это не тестирование самого Lighthouse, а то, как скрипт Node работает с данными результатов, возвращенными Lighthouse.Поэтому зависимость от Маяка должна быть осмеяна.
В ходе моего тестирования я обнаружил, что Chrome-Launcher, который вызывается Lighthouse, запускается, когда я делаю свой тест Jest.Это означает, что я не издеваюсь над этой зависимостью правильно.Я думал, что этого было достаточно, чтобы издеваться над Lighthouse, и сделал это, но я запутался в том, как я могу издеваться над функцией «thennable» для функции запуска хрома.
Функция launchChromeAndRunLighthouse
, приведенная ниже, взята из документации на узел Маяка.
lighthouse.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, чтобы он не запускался.Спасибо