1

私は得られない問題を実行しています。私が発行したイベントは、テストでキャッチされません。次のコードは次のとおりです ( event.js)。

var util = require('util'),
    proc = require('child_process'),
    EventEmitter = require('events').EventEmitter;

var Event = function() {
    var _self = this;
    proc.exec('ls -l', function(error, stdout, stderr) {
        _self.emit('test');
        console.log('emitted');
    });
};
util.inherits(Event, EventEmitter);

module.exports = Event;

そしてそれに応じたテスト:

var proc = require('child_process'),
    sinon = require('sinon'),
    chai = require('chai'),
    expect = chai.expect,
    Event = require('./event'),
    myEvent, exec;

var execStub = function() {
    var _self = this;
    return sinon.stub(proc, 'exec', function(cmd, callback) {
        _self.cmd = cmd;
        console.log(cmd);
        callback();
    });
};

describe('Event', function() {
    beforeEach(function(){
        exec = execStub();
    });

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

    it('Event should be fired', function(done) {
        myEvent = new Event();
        myEvent.on('test', function() {
            expect(exec.cmd).to.equal('ls -l');
            done();
        });
    });
});

今のところ、ここに私が見るものがあります:

  • console.log('emitted');が発生するため、イベントはテスト中に実際に発行されます。
  • が発生するため、exec関数は実際にスタブ化されます。console.log(cmd);

しかし、テストはタイムアウトで失敗し、次のエラー メッセージが表示されます。

~ % mocha --timeout 15000 -R spec event.test.js


  Event
    ◦ Event should be fired: ls -l
emitted
    1) Event should be fired


  0 passing (15 seconds)
  1 failing

  1) Event Event should be fired:
     Error: timeout of 15000ms exceeded
      at null.<anonymous> (/usr/lib/node_modules/mocha/lib/runnable.js:165:14)
      at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

テストからスタブを削除すると、テストは正常に実行されます。タイムアウトを増やしても、まだ同じ問題があります。

私が間違っていることについて何か考えはありますか?

よろしく

4

1 に答える 1