使用SinonJS来存根库

时间:2014-01-29 17:36:51

标签: node.js tdd sinon

我目前正在编写NodeJS应用程序,并且我想为函数编写测试。 SinonJS似乎是间谍/存根/模拟库的首选,但我似乎无法弄清楚如何在函数上存根方法。例如:

让我们说我正在使用名为ExecSync的库。我想在我的规范中对该库中的sh()方法进行存根,但它似乎无法正常工作。有人能够从单独的spec文件中提供一个存储库方法的示例吗?

更清楚:

  • spec.js - 这是我编写测试的地方。
  • util.js - 这是我测试的方法存在的地方。该方法调用execSync.sh()并通过npm和require()包含。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

有些代码会很好,但通常可以这样实现(使用mocha)

describe('A test', function() {
  beforeEach(function() {
    // what you want to stub is passed as a string
    sinon.stub(ExecSync, 'sh').yields(null,40);
  });

  afterEach(function() {
    ExecSync.restore();
  });

  it('has behaviour', function() {
    ExecSync.sh(function(err, res) {
      // err = null, res = 40
    });
  });
});

当您无法存根依赖项时,另一种常见做法是将该依赖项写入您正在测试的模块,例如

mymodule.ExecSync = function(arg) {
  ExecSync.sh(arg);
};

然后你可以简单地在你的模块上存根ExecSync,而不必根本调用依赖。