Mocha / Sinon - JavaScript中的单元测试承诺

时间:2017-02-21 21:10:12

标签: javascript unit-testing mocha

在学习电子的同时,我决定也想用JavaScript训练测试技术。我有以下代码:

const winston = require('winston');
const AutoLaunch = require('auto-launch');

const launchFunction = (mb) => {
  const autolaunch = new AutoLaunch();

  autolaunch
    .isEnabled()
    .then((isEnabled) => {
      if (isEnabled) {
        return;
      }
      autolaunch.enable();
    })
    .catch((err) => {
      winston.error(err);
    });
};

如果在特定条件下正确触发 autolaunch.enabled(),我想断言我编写任何不会强迫我使用精确副本创建存根的测试时遇到很多问题功能来自 then()。在这个解决方案的设计中有一个选项可能有问题 - 我可以(并且希望)更改代码以使其更易于测试。如何在不影响代码可测试性的情况下解决这个问题?

我使用 mocha sinon ,但我并不觉得这些工具真的很依赖

1 个答案:

答案 0 :(得分:0)

我会尝试更多功能性方法。在功能中包装有问题的闭包并单独测试。

function enableWhenNeeded(autolaunch, isEnabled) {
      if (isEnabled) {
        return;
      }
      autolaunch.enable();
}

autolaunch
    .isEnabled()
    .then(curry(enableWhenNeeded, autolaunch))
    .catch((err) => {
      winston.error(err);
    });

出于示例的目的,我编写了函数 curry(),但我认为至少有三十五个JavaScript框架提供了一个。

总是一个问题是这个代码值得测试;如果AutoLaunch是第三方,为什么要测试呢?