增加单元测试和优化代码

This commit is contained in:
welefen 2014-07-02 15:06:48 +08:00
parent a229791ef8
commit a000cc9f5f
2 changed files with 135 additions and 35 deletions

View File

@ -854,48 +854,42 @@ var Model = module.exports = Class(function(){
});
},
/**
* 获取一条记录的某个字段值
* 获取某个字段下的记录
* @return {[type]} [description]
*/
getField: function(field, sepa){
field = field.trim();
getField: function(field, one){
var self = this;
var multi = false;
var parseOptions;
return this.parseOptions({
'field': field
}).then(function(options){
parseOptions = options;
if (field.indexOf(',') > -1) {
if (options.limit === undefined && isNumber(sepa)) {
options.limit = sepa;
}
multi = true;
}else{
options.limit = isNumber(sepa) ? sepa : 1;
return this.parseOptions({'field': field}).then(function(options){
if (isNumber(one)) {
options.limit = one;
}else if (one === true) {
options.limit = 1;
}
return self.db.select(options);
}).then(function(data){
var multi = field.indexOf(',') > -1;
if (multi) {
var length = field.split(',').length;
field = Object.keys(data[0] || {});
var key = field.shift();
var key2 = field.shift();
var cols = {};
data.forEach(function(item){
var name = item[key];
if (length === 2) {
cols[name] = item[key2];
}else{
cols[name] = isString(sepa) ? item.join(sepa) : item;
}
});
return cols;
var fields = field.split(/\s*,\s*/);
var result = {};
fields.forEach(function(item){
result[item] = [];
})
data.every(function(item){
fields.forEach(function(fItem){
if (one === true) {
result[fItem] = item[fItem];
}else{
result[fItem].push(item[fItem]);
}
})
return one === true ? false : true;
})
return result;
}else{
if (sepa !== true && parseOptions.limit === 1) {
return data[0];
}
return Object.values(data[0] || {})[0];
data = data.map(function(item){
return Object.values(item)[0];
})
return one === true ? data[0] : data;
}
});
},

View File

@ -12,7 +12,8 @@ beforeEach(function(){
var data = [{"Field":"id","Type":"int(11) unsigned","Null":"NO","Key":"PRI","Default":null,"Extra":"auto_increment"},{"Field":"title","Type":"varchar(255)","Null":"NO","Key":"UNI","Default":null,"Extra":""},{"Field":"cate_id","Type":"tinyint(255)","Null":"NO","Key":"MUL","Default":"1","Extra":""},{"Field":"cate_no","Type":"int(11)","Null":"YES","Key":"","Default":null,"Extra":""},{"Field":"md5","Type":"varchar(255)","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"width","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"height","Type":"int(11)","Null":"NO","Key":"","Default":"0","Extra":""},{"Field":"pic_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"view_nums","Type":"int(11)","Null":"NO","Key":"MUL","Default":"0","Extra":""},{"Field":"content","Type":"text","Null":"NO","Key":"","Default":null,"Extra":""},{"Field":"date","Type":"int(11)","Null":"NO","Key":"MUL","Default":null,"Extra":""},{"Field":"is_hide","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"0","Extra":""},{"Field":"is_safe","Type":"tinyint(11)","Null":"YES","Key":"MUL","Default":"1","Extra":""}];
return getPromise(data);
}
return getPromise([]);
var data = [{"id":7565,"title":"米兰达·可儿干练服装写真大片","cate_id":1,"cate_no":0,"md5":"27e562c50195153d89c52072bd4c8d5a","width":936,"height":1177,"pic_nums":11,"view_nums":1965,"content":"","date":20140526,"is_hide":0,"is_safe":0},{"id":7564,"title":"[Beautyleg]2014.05.21 No.977 Cindy","cate_id":2,"cate_no":977,"md5":"e31b3202f3cefe9944fb0e086064694f","width":1600,"height":2400,"pic_nums":30,"view_nums":1558,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7563,"title":"[DISI第四印象]2014.05.21 NO.281","cate_id":7,"cate_no":281,"md5":"ea455be2cab6813964543662b462a550","width":960,"height":640,"pic_nums":30,"view_nums":2335,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7562,"title":"[PANS写真]2014-05-20 NO.242 小倩 套图","cate_id":6,"cate_no":242,"md5":"de775e0785c379ad853b2a299e4736cd","width":1600,"height":2397,"pic_nums":30,"view_nums":2013,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7561,"title":"[ROSI写真]2014.05.20 NO.896","cate_id":3,"cate_no":896,"md5":"65e4a012a123190184a07d87c21e9dec","width":1600,"height":1067,"pic_nums":30,"view_nums":1425,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7560,"title":"[ROSI写真]2014.05.21 NO.897","cate_id":3,"cate_no":897,"md5":"51477ddac8a1d67d30f83da66e0b9ff5","width":1600,"height":1067,"pic_nums":22,"view_nums":1433,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7559,"title":"[ROSI写真]2014.05.22 NO.898","cate_id":3,"cate_no":898,"md5":"a74d4a187ae126b1446503da309b56c9","width":796,"height":531,"pic_nums":30,"view_nums":1994,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7558,"title":"[ru1mm写真] 2014-05-20 NO.151","cate_id":17,"cate_no":151,"md5":"4818e310b0c983e17ae87414a808879d","width":1200,"height":1800,"pic_nums":30,"view_nums":2035,"content":"","date":20140524,"is_hide":0,"is_safe":0},{"id":7557,"title":"[ru1mm写真] 2014-05-22 NO.152","cate_id":17,"cate_no":152,"md5":"af8b033373b1526bd8a28053f065359f","width":1600,"height":1067,"pic_nums":30,"view_nums":1118,"content":"","date":20140524,"is_hide":0,"is_safe":0}]
return getPromise(data);
})
});
describe('Model', function(){
@ -1618,6 +1619,111 @@ describe('Model', function(){
})
})
})
describe('updateInc', function(){
var model = D('Group');
it('update view_nums', function(done){
model.where({id: 10}).updateInc('view_nums').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + 10', function(done){
model.where({id: 10}).updateInc('view_nums', 10).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + 10A', function(done){
model.where({id: 10}).updateInc('view_nums', '10A').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums + xxx', function(done){
model.where({id: 10}).updateInc('view_nums', 'xxx').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums+1 WHERE ( `id` = 10 )");
done();
})
})
})
describe('updateDec', function(){
var model = D('Group');
it('update view_nums', function(done){
model.where({id: 10}).updateDec('view_nums').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - 10', function(done){
model.where({id: 10}).updateDec('view_nums', 10).then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - 10A', function(done){
model.where({id: 10}).updateDec('view_nums', '10A').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-10 WHERE ( `id` = 10 )");
done();
})
})
it('update view_nums - xxx', function(done){
model.where({id: 10}).updateDec('view_nums', 'xxx').then(function(){
var sql = model.getLastSql().trim();
//console.log(sql);
assert.equal(sql, "UPDATE `meinv_group` SET `view_nums`=view_nums-1 WHERE ( `id` = 10 )");
done();
})
})
})
describe('getField', function(){
var model = D('Group');
it('get id field', function(done){
model.getField('id').then(function(data){
assert.equal(JSON.stringify(data), '[7565,7564,7563,7562,7561,7560,7559,7558,7557]')
done();
})
})
it('get id field limit 5', function(done){
model.getField('id', 5).then(function(data){
var sql = model.getLastSql().trim();
assert.equal(sql, 'SELECT `id` FROM `meinv_group` LIMIT 5')
done();
})
})
it('get id field by one', function(done){
model.getField('id', true).then(function(data){
var sql = model.getLastSql().trim();
assert.equal(data, 7565);
assert.equal(sql, 'SELECT `id` FROM `meinv_group` LIMIT 1')
done();
})
})
it('get multi field', function(done){
model.getField('id,view_nums').then(function(data){
var sql = model.getLastSql().trim();
assert.equal(JSON.stringify(data), '{"id":[7565,7564,7563,7562,7561,7560,7559,7558,7557],"view_nums":[1965,1558,2335,2013,1425,1433,1994,2035,1118]}');
assert.equal(sql, 'SELECT `id`,`view_nums` FROM `meinv_group`')
done();
})
})
})