如何使用mocha和chai测试没有端点的Node模块

时间:2015-11-09 22:10:27

标签: regex node.js testing mocha chai

首先让我说明我是一个节点并测试菜鸟。我编写了一个节点模块,用于更新特定目录(以及所有子目录)中所有指定文件类型的所有版权标头。它按预期工作,但我想编写一些测试来验证功能,以防将来发生任何变化,或者在其他地方使用它。

对测试,节点和mocha / chai不熟悉我无法想出一种有意义的测试方法。没有前端,也没有端点。我只传入一个文件扩展名列表,一个包含的子目录列表和一个排除的子目录列表并运行。 (这些列表在模块中用作正则表达式)。文件已就地更新。

有谁能让我知道如何开始这个?我没有被Mocha和Chai束缚,如果有更好的方法,我全都耳朵。如果这超出了stackoverflow的范围,我很抱歉。

1 个答案:

答案 0 :(得分:0)

假设你的模块上有一个方法,它返回一个更新文件列表,这又需要一些其他模块遍历文件目录来确定所述文件,你的测试看起来就像这样。您可以使用sinon进行存根。 :

var assert = require('assert');
var sinon = require('sinon');
var sandbox = sinon.sandbox.create();
var copywriter = require('../copywriter');
var fileWalker = require('../fileWalker');

describe('copywriter', function() {
  beforeEach(function() {
      sandbox.stub(fileWalker, 'filesToUpdate').yields(null, ['a.txt', 'b.txt']);
  });

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

  // the done is passed into this test as a callback for asynchronous tests
  // you would not need this for synchronous tests
  it('updates the copyright headers', function(done) {
    copywriter('../some-file-path', function(err, data){
        assert.ifError(err);
        sinon.assert.calledWith(fileWalker.filesToUpdate, '../some-file-path');
        assert.deepEqual(data.updated, ['a.txt', 'b.txt']);
        done();
    });
  });
});