私は得られない問題を実行しています。私が発行したイベントは、テストでキャッチされません。次のコードは次のとおりです ( 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)
テストからスタブを削除すると、テストは正常に実行されます。タイムアウトを増やしても、まだ同じ問題があります。
私が間違っていることについて何か考えはありますか?
よろしく