【问题标题】:How to test inquirer validation如何测试查询器验证
【发布时间】:2019-12-10 18:34:24
【问题描述】:

我已经在How to write unit tests for Inquirer.js?看到了问答

我想测试我的验证是否正确。例如,如果我有:

const answer = await inquirer.prompt({
   name: 'answer',
   message: 'are you sure?'
   type: 'input',
   validate: async (input) => {
      if (input !== 'y' || input !== 'n') {
         return 'Incorrect asnwer';
      }

      return true;
   }
});

我想运行一个可以运行的单元测试并验证如果我提供了blah,验证将正确验证。我该如何为此编写测试?

【问题讨论】:

    标签: javascript node.js inquirer


    【解决方案1】:

    我会将验证转移到单独的函数中,并单独对其进行测试。测试和代码都会看起来更清晰:

     const confirmAnswerValidator = async (input) => {
          if (input !== 'y' || input !== 'n') {
             return 'Incorrect asnwer';
          }
          return true;
       };
    const answer = await inquirer.prompt({
       name: 'answer',
       message: 'are you sure?'
       type: 'input',
       validate: confirmAnswerValidator
    });
    

    然后在测试中

    describe('Confirm answer validator', () => {
     it('Raises an error on "blah"', async () => {
       const result = await confirmAnswerValidator('blah');
       expect(result).toBe('Incorrect asnwer');
     });
    });
    

    【讨论】:

    • 这是一个很好的验证功能的单元测试。它与inquirer 相关的唯一缺点。如果我们用任何 cli 提示解决方案替换 inquirer,测试将失败。我建议创建一个测试来验证'Incorrect answer' 是通过标准输出提示的。这将断言用户所看到的。我还没有找到这样做的方法。
    • 没有绑定,只是测试验证功能而已。所以我们正在测试我们的 func 并依靠 3rd 方库来完成它的工作。由模块产生的控制标准输出的测试看起来像一个组件测试,而不是单元。
    • 是的,这是一个集成/组件测试。嘿,谢谢你的回答?我最近才学习测试和cli。您认为对此验证功能的单元测试是否提供了足够好的价值?想象一下你有10个这样的。编写集成/组件测试不是更高价值的选择吗?
    • 我总是视情况而定。我认为一般情况下确实如此。纯函数的单元测试总是一个好的开始,因为它们快速且稳定。所以你可以测试所有类型的案例。组件测试需要更多的维护工作,所以我更喜欢只将它们用于关键路径。
    猜你喜欢
    • 1970-01-01
    • 2012-06-29
    • 2011-05-23
    • 2011-12-06
    • 1970-01-01
    • 2020-09-06
    • 2020-11-17
    • 2017-04-18
    相关资源
    最近更新 更多