chromeLauncher / Lighthouse: макетирование зависимостей, которые возвращают обещания с помощью Jest - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть приложение, которое включает в себя скрипт 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, чтобы он не запускался.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...