如何将Mocha与Inquirer.js结合

问题描述

我希望使自动化测试更加灵活。我有一个QA团队,他们不太了解JavaScript,并且可能不得不为没有编程技能或只有很少编程技能的用户设计测试。

我有一些脚本是使用mocha测试框架创建的,而spectron.js(对于使用lectrion.js构建的应用程序)测试了产品的一些功能,我不想每次运行脚本时都进行每个测试。我的临时解决方案是将测试捆绑为一个“套件”。像这样-

function DiagnosticSuite(location,workstation,workflowName){
    CreateWorkflow(location,workflowName); 
    SetWorkFlowToStation(location,workflowName);
    DiagnosticTestFlow();
    return;
}

function PowerflowSuite(imei,location,workflowName){
    SetWorkFlowToStation(location,workflowName);
    powerOffFlow(imei);
    return;
}

我当时正在考虑使用Inquirer并使用基于条件的输入来运行上述测试之一。像这样-

inquirer.prompt([
    {
        type: 'list',name: 'Which workflow do you want to run?',choices: ['Power Off','Diagnostic']
    }
]).then((answers) => { 
     if(answers == 'Power Off'){
          PowerflowSuite(imei,workflowName);
     }   
})

但是,当我测试Mocha似乎不等待inquerior的用户输入来运行测试时,却得到了这样的输出-

$ npm test

> metistests@1.0.0 test C:\Users\DPerez1\Desktop\metis-automation
> mocha

? Which workflow do you want to run?: (Use arrow keys)
> Power Off
  Diagnostic

  0 passing (0ms)

似乎它正在运行,没有看到任何测试和完成,当我选择答案时,程序就关闭了。

我想知道为什么Mocha会这样做,以及是否有可能使用诸如问询者之类的库来运行现有的Mocha脚本。

解决方法

因此,我发现了一个解决问题的方法,以防有人跌跌撞撞地在想。

我在package.json文件上将CLI部分和Mocha部分分离为不同的脚本。这样,我可以使用节点子进程库来运行mocha部分,并通过process.argv objject从CLI部分传递信息。

因此,CLI部分将询问我要运行的测试,环境和用户。然后,我创建了一个命令来放入子进程e​​xec函数(我认为还有其他要使用的命令,但并不重要。)在运行mocha测试时,我会解析argvs并将它们传递给函数,以便测试可以基于此运行。 / p>