chromeLauncher / Lighthouse:模拟链接的依赖项,可使用Jest返回承诺

时间:2018-11-18 20:01:18

标签: node.js unit-testing jestjs lighthouse

我有一个应用程序,该应用程序包含一个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感到困惑,因此无法启动它。谢谢

1 个答案:

答案 0 :(得分:0)

你不需要模拟 chromeLauncher,让它像它一样工作。仅仅嘲笑灯塔就足以让测试运行并通过。它在我的项目中按预期工作。