首页 > 解决方案 > 如何将 mocha 与inquirer.js 结合使用

问题描述

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

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

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

function PowerflowSuite(imei, location, workstation, workflowName){
    SetWorkFlowToStation(location, workstation, 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, location, workstation, workflowName);
     }   
})

当我测试 Mocha 似乎没有等待来自查询器的用户输入来运行测试时,我得到了这样的输出 -

$ 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 脚本。

标签: javascripttestingmocha.jscommand-line-interfaceinquirer

解决方案


所以我找到了解决问题的方法,以防有人在这里绊倒并想知道。

我在 package.json 文件中将 CLI 部分和 Mocha 部分分成不同的脚本。这样我就可以使用节点子进程库来运行 mocha 部分并通过 process.argv 对象传递来自 CLI 部分的信息。

所以 CLI 部分会问我要运行什么测试、什么环境以及什么用户。我创建了一个命令来放入子进程 exec 函数(我认为还有其他可以使用但不重要。)当 mocha 测试运行时,我解析 argvs 并将它们传递给函数,以便测试可以基于它运行。


推荐阅读