mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Increase unit test coverage context/exec modules
This commit is contained in:
@@ -16,7 +16,123 @@
|
||||
var should = require("should");
|
||||
var sinon = require("sinon");
|
||||
var path = require("path");
|
||||
var events = require("events");
|
||||
|
||||
|
||||
var child_process = require('child_process');
|
||||
|
||||
var NR_TEST_UTILS = require("nr-test-utils");
|
||||
|
||||
var exec = NR_TEST_UTILS.require("@node-red/runtime/lib/exec");
|
||||
|
||||
describe("runtime/exec", function() {
|
||||
var logEvents;
|
||||
var mockProcess;
|
||||
|
||||
beforeEach(function() {
|
||||
var logEventHandler = new events.EventEmitter();
|
||||
logEvents = [];
|
||||
logEventHandler.on('event-log', function(ev) {
|
||||
logEvents.push(ev);
|
||||
});
|
||||
exec.init({events:logEventHandler});
|
||||
|
||||
mockProcess = new events.EventEmitter();
|
||||
mockProcess.stdout = new events.EventEmitter();
|
||||
mockProcess.stderr = new events.EventEmitter();
|
||||
sinon.stub(child_process,'spawn',function(command,args,options) {
|
||||
mockProcess._args = {command,args,options};
|
||||
return mockProcess;
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
if (child_process.spawn.restore) {
|
||||
child_process.spawn.restore();
|
||||
}
|
||||
});
|
||||
|
||||
it("runs command and resolves on success - no emit", function(done) {
|
||||
var command = "cmd";
|
||||
var args = [1,2,3];
|
||||
var opts = { a: true };
|
||||
exec.run(command,args,opts).then(function(result) {
|
||||
command.should.eql(mockProcess._args.command);
|
||||
args.should.eql(mockProcess._args.args);
|
||||
opts.should.eql(mockProcess._args.options);
|
||||
logEvents.length.should.eql(0);
|
||||
result.code.should.eql(0);
|
||||
result.stdout.should.eql("123");
|
||||
result.stderr.should.eql("abc");
|
||||
done();
|
||||
}).catch(done);
|
||||
|
||||
mockProcess.stdout.emit('data',"1");
|
||||
mockProcess.stderr.emit('data',"a");
|
||||
mockProcess.stderr.emit('data',"b");
|
||||
mockProcess.stdout.emit('data',"2");
|
||||
mockProcess.stdout.emit('data',"3");
|
||||
mockProcess.stderr.emit('data',"c");
|
||||
mockProcess.emit('close',0);
|
||||
});
|
||||
|
||||
it("runs command and resolves on success - emit", function(done) {
|
||||
var command = "cmd";
|
||||
var args = [1,2,3];
|
||||
var opts = { a: true };
|
||||
exec.run(command,args,opts,true).then(function(result) {
|
||||
logEvents.length.should.eql(8);
|
||||
done();
|
||||
}).catch(done);
|
||||
|
||||
mockProcess.stdout.emit('data',"1");
|
||||
mockProcess.stderr.emit('data',"a");
|
||||
mockProcess.stderr.emit('data',"b");
|
||||
mockProcess.stdout.emit('data',"2");
|
||||
mockProcess.stdout.emit('data',"3");
|
||||
mockProcess.stderr.emit('data',"c");
|
||||
mockProcess.emit('close',0);
|
||||
})
|
||||
|
||||
it("runs command and rejects on error - close", function(done) {
|
||||
var command = "cmd";
|
||||
var args = [1,2,3];
|
||||
var opts = { a: true };
|
||||
exec.run(command,args,opts).then(function() {
|
||||
done("Command should have rejected");
|
||||
}).catch(function(result) {
|
||||
result
|
||||
result.code.should.eql(123);
|
||||
result.stdout.should.eql("123");
|
||||
result.stderr.should.eql("abc");
|
||||
done();
|
||||
}).catch(done);
|
||||
|
||||
mockProcess.stdout.emit('data',"1");
|
||||
mockProcess.stderr.emit('data',"a");
|
||||
mockProcess.stderr.emit('data',"b");
|
||||
mockProcess.stdout.emit('data',"2");
|
||||
mockProcess.stdout.emit('data',"3");
|
||||
mockProcess.stderr.emit('data',"c");
|
||||
mockProcess.emit('close',123);
|
||||
})
|
||||
|
||||
it("runs command and rejects on error - error", function(done) {
|
||||
var command = "cmd";
|
||||
var args = [1,2,3];
|
||||
var opts = { a: true };
|
||||
exec.run(command,args,opts).then(function() {
|
||||
done("Command should have rejected");
|
||||
}).catch(function(result) {
|
||||
result
|
||||
result.code.should.eql(456);
|
||||
result.stdout.should.eql("");
|
||||
result.stderr.should.eql("test-error");
|
||||
done();
|
||||
}).catch(done);
|
||||
|
||||
mockProcess.emit('error',"test-error");
|
||||
mockProcess.emit('close',456);
|
||||
})
|
||||
|
||||
});
|
||||
|
Reference in New Issue
Block a user