0

我正在用 mocha 编写一个 metalsmith 插件及其相关的测试套件。

如果缺少配置,插件应该抛出异常:

function plugin(config) {
   ...
   return function(files, metalsmith, done) {
      ...
      done(new Error("config error"));
   }
}

我尝试以这种方式用摩卡测试它:

describe('my plugin', function() {
it('should throw an exception', function(done) {
    var metalsmith = Metalsmith('test/fixtures/basic');
    metalsmith
        .use(myplugin({
            someconfig: {

        }))
        .build(function(err,files) {
            assert(err);
            done();
        });
  });
});

当我运行测试时,我得到了这个结果:

my plugin
    ✓ should throw an exception 
    1) should throw an exception


  1 passing (31ms)
  1 failing

  1) my plugin should throw an exception:
     Error: done() called multiple times

所以看起来测试还可以,但不知何故又运行了一次,这次失败了......

4

1 回答 1

2

问题是错误被抛出在 foreach 循环中,导致 done() 被多次调用:

Object.keys(files).forEach(function (file) {
...
done(new Error("config error"));
...
}

添加简单的返回不起作用,因为您无法从 foreach 循环返回。

所以使用一个简单的for循环而不是foreach,返回第一个错误:

for (var file in files) {
...
return done(new Error("config error"));
...
}
于 2014-09-29T14:07:49.503 回答