0

私は、金属細工師のプラグインとそれに関連するテスト スイートを mocha で作成しています。

構成が不足している場合、プラグインは例外をスローする必要があります。

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 ループから戻ることができないため、単純な return を追加しても機能しません。

したがって、foreach の代わりに単純な for ループを使用して、最初のエラーに戻ります。

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