Authored by 周奇琪

编写connect.js的单元测试

@@ -39,7 +39,7 @@ class Connector extends events.EventEmitter { @@ -39,7 +39,7 @@ class Connector extends events.EventEmitter {
39 client.connect(config.port, config.host, function() { 39 client.connect(config.port, config.host, function() {
40 that.connected = true; 40 that.connected = true;
41 log.info(config.host + ':' + config.port + ':读写器连接成功!'); 41 log.info(config.host + ':' + config.port + ':读写器连接成功!');
42 - send(); 42 + send(that);
43 }); 43 });
44 44
45 45
@@ -26,7 +26,7 @@ export let log = loger; @@ -26,7 +26,7 @@ export let log = loger;
26 * @param {Number} number 十进制数 26 * @param {Number} number 十进制数
27 * @return {Number} 16进制数字 27 * @return {Number} 16进制数字
28 */ 28 */
29 -export let tenToHex = function (number) { 29 +export let tenToHex = function(number) {
30 return (parseInt(number, 10) >>> 0).toString(16); 30 return (parseInt(number, 10) >>> 0).toString(16);
31 }; 31 };
32 32
@@ -37,7 +37,7 @@ export let tenToHex = function (number) { @@ -37,7 +37,7 @@ export let tenToHex = function (number) {
37 * @param {Boolean} minus true表示负数,false表示正数 37 * @param {Boolean} minus true表示负数,false表示正数
38 * @return {Number} 十进制数字 38 * @return {Number} 十进制数字
39 */ 39 */
40 -export let hexToTen = function (number, minus) { 40 +export let hexToTen = function(number, minus) {
41 if (minus) { 41 if (minus) {
42 return parseInt('FFFF' + number, 16) >> 0; 42 return parseInt('FFFF' + number, 16) >> 0;
43 } else { 43 } else {
@@ -52,7 +52,7 @@ export let hexToTen = function (number, minus) { @@ -52,7 +52,7 @@ export let hexToTen = function (number, minus) {
52 * @param {Buff} data 返回数据流 52 * @param {Buff} data 返回数据流
53 * @return {Array} 转成16进制的数组 53 * @return {Array} 转成16进制的数组
54 */ 54 */
55 -export let toHex = function (data) { 55 +export let toHex = function(data) {
56 let arr = []; 56 let arr = [];
57 for (let i = 0; i < data.length; i++) { 57 for (let i = 0; i < data.length; i++) {
58 arr[i] = tenToHex(data.readUIntLE(i)); 58 arr[i] = tenToHex(data.readUIntLE(i));
@@ -69,7 +69,7 @@ export let toHex = function (data) { @@ -69,7 +69,7 @@ export let toHex = function (data) {
69 * @param {Object} output 标准输出的规格对象 69 * @param {Object} output 标准输出的规格对象
70 * @return {object} 标准输出 70 * @return {object} 标准输出
71 */ 71 */
72 -export let returnProc = function (data, ip, output) { 72 +export let returnProc = function(data, ip, output) {
73 if (!_.isArray(data) || _.size(data) < 1) { 73 if (!_.isArray(data) || _.size(data) < 1) {
74 return false; 74 return false;
75 } 75 }
@@ -78,7 +78,7 @@ export let returnProc = function (data, ip, output) { @@ -78,7 +78,7 @@ export let returnProc = function (data, ip, output) {
78 if (!output[ret]) { 78 if (!output[ret]) {
79 return false; 79 return false;
80 } 80 }
81 - //log.info("读写器(" + ip + ")返回:" + output[ret].message + " 返回码:" + ret); 81 + log.info("读写器(" + ip + ")返回:" + output[ret].message + " 返回码:" + ret);
82 output[ret].hex = data; 82 output[ret].hex = data;
83 return output[ret]; 83 return output[ret];
84 }; 84 };
@@ -90,7 +90,7 @@ export let returnProc = function (data, ip, output) { @@ -90,7 +90,7 @@ export let returnProc = function (data, ip, output) {
90 * @param {String} data 得到的指令数据结果集 90 * @param {String} data 得到的指令数据结果集
91 * @return {Object} 返回拆分结果和拆分依据的指令头 91 * @return {Object} 返回拆分结果和拆分依据的指令头
92 */ 92 */
93 -export let spliteRet = function (mq, data) { 93 +export let spliteRet = function(mq, data) {
94 let indexes = [], 94 let indexes = [],
95 rets = [], 95 rets = [],
96 i, 96 i,
@@ -147,9 +147,9 @@ export let spliteRet = function (mq, data) { @@ -147,9 +147,9 @@ export let spliteRet = function (mq, data) {
147 * @param {Array} data 返回的结果集 eg. ['f0','2','0','0'] 147 * @param {Array} data 返回的结果集 eg. ['f0','2','0','0']
148 * @return {Object} 返回定位到的指令 148 * @return {Object} 返回定位到的指令
149 */ 149 */
150 -export let locateOrder = function (orders, data) { 150 +export let locateOrder = function(orders, data) {
151 let orderRet = {}; 151 let orderRet = {};
152 - _.forIn(orders, function (val, key) { 152 + _.forIn(orders, function(val, key) {
153 var order = val.input.toLowerCase(); 153 var order = val.input.toLowerCase();
154 var prefix = data[0].toLowerCase(); 154 var prefix = data[0].toLowerCase();
155 155
  1 +import expect from 'expect.js';
  2 +import muk from 'muk';
  3 +import net from '../mock/fakeNet';
  4 +
  5 +describe('connector.js', function() {
  6 +
  7 + let C;
  8 + before(function() {
  9 + C = muk('../../src/lib/connector', {
  10 + 'net': net
  11 + });
  12 +
  13 + C.__set__('log', {
  14 + info: function() {},
  15 + error: function() {}
  16 + });
  17 + })
  18 +
  19 + describe('init', function() {
  20 + it('new connector init ok', function(done) {
  21 + var connect = new C({
  22 + host: '1.1.1.1',
  23 + port: '123'
  24 + }, function(con) {
  25 + expect(con.connected).to.be(true);
  26 + done();
  27 + });
  28 + });
  29 +
  30 + it('new connector error', function(done) {
  31 + var connect = new C({
  32 + host: '1.1.1.1',
  33 + port: '123'
  34 + }, function(con) {}, function(client, data, error) {
  35 + expect(error.message).to.be('mock error');
  36 + done();
  37 + });
  38 +
  39 + connect.client.addEmit('error', {
  40 + message: 'mock error'
  41 + });
  42 + });
  43 +
  44 + it('new connect after error then reconnect', function(done) {
  45 + var connect = new C({
  46 + host: '1.1.1.1',
  47 + port: '123'
  48 + }, function(con) {}, function() {});
  49 + connect.on('reconnect', function() {
  50 + done();
  51 + });
  52 + connect.client.addEmit('error', {
  53 + message: 'mock error'
  54 + });
  55 + });
  56 + });
  57 +
  58 + describe('connector write then get data', function() {
  59 + it('on data expect ok', function(done) {
  60 + C.__set__('toHex', function() {});
  61 + C.__set__('spliteRet', function() {
  62 + return {
  63 + rets: ['mock']
  64 + }
  65 + });
  66 + C.__set__('locateOrder', function() {
  67 + return {
  68 + name: 'mock'
  69 + }
  70 + });
  71 +
  72 + var connect = new C({
  73 + host: '1.1.1.1',
  74 + port: '123'
  75 + }, function(con) {}, function() {
  76 + return 'ok';
  77 + });
  78 +
  79 + connect.on('mock', function(data) {
  80 + expect(data).to.be('ok');
  81 + done();
  82 + });
  83 +
  84 + connect.client.write('test');
  85 + });
  86 + });
  87 +
  88 + describe('sendOrder', function() {
  89 + it('send expect same back', function(done) {
  90 + var connect = new C({
  91 + host: '1.1.1.1',
  92 + port: '123'
  93 + }, function(con) {}, function() {});
  94 + C.__set__('spliteRet', function(mq) {
  95 + return {
  96 + rets: [],
  97 + mq: mq
  98 + };
  99 + });
  100 + let call = new Buffer('Mock', 'hex');
  101 + connect.client.on('data', function(data) {
  102 + expect(data).to.eql(call);
  103 + expect(connect.orderMq[0]).to.be('mo');
  104 + done();
  105 + });
  106 + connect.send('Mock');
  107 +
  108 + });
  109 + })
  110 +
  111 + after(function() {
  112 + muk.restore();
  113 + });
  114 +});
  1 +import expect from 'expect.js';
  2 +import muk from 'muk';
  1 +import events from 'events';
  2 +
  3 +class FakeSocket extends events.EventEmitter {
  4 + constructor() {
  5 + super();
  6 + this.data = {};
  7 + }
  8 +
  9 + connect(port, host, callback) {
  10 + callback();
  11 + }
  12 +
  13 + write(data) {
  14 + this.addEmit('data', data);
  15 + }
  16 +
  17 + addEmit(ev, data) {
  18 + let that = this;
  19 + process.nextTick(function() {
  20 + that.emit(ev, data);
  21 + });
  22 + }
  23 + destroy() {
  24 + let that = this;
  25 + process.nextTick(function() {
  26 + that.addEmit('close', that.data);
  27 + });
  28 + }
  29 +}
  30 +
  31 +export default {
  32 + Socket: FakeSocket
  33 +};
@@ -2,4 +2,5 @@ require("babel/register")({ @@ -2,4 +2,5 @@ require("babel/register")({
2 plugins: ["babel-plugin-rewire"] 2 plugins: ["babel-plugin-rewire"]
3 }); //es6 polyfill 3 }); //es6 polyfill
4 4
5 -require('./lib/index.test');  
  5 +require('./lib/index.test');
  6 +require('./lib/connector.test');