sqlquery-tool
Version:
提供nodejs 版本的mysql 链接查询,用于一些简单的条件封装。
167 lines (162 loc) • 5.44 kB
JavaScript
let query = require('../lib/index');
let assert = require('assert');
/**
* 链接本地数据库
**/
query.query({
host : '127.0.0.1',
port : '3306',
user : 'root',
password : 'root',
database : 'test'
});
//测试函数
(async function test(){
try{
let tableName = 'test',tableName2 = 'info';//主表以及从表
//删除表结构并创建空表
before(async ()=>{
let dropSql = `drop table if exists ${tableName}`;
let dropSql2 = `drop table if exists ${tableName2}`;
await query.query({sql : dropSql,params : []});
await query.query({sql : dropSql2,params : []});
//创建表结构
let tableCreateSql = `
create table ${tableName} (
id varchar(25),
name varchar(25)
)
`;
let tableCreateSql2 = `
create table ${tableName2} (
id varchar(25),
title varchar(25),
pid varchar(25)
)
`;
//创建表结构
await query.query({sql : tableCreateSql,params : []})
await query.query({sql : tableCreateSql2,params : []})
});
describe('#desc()',async ()=>{
it(`返回${tableName}的两个字段`,async ()=>{
let tableInfo = await query.desc(tableName)
assert.equal(2,tableInfo.length)
});
it(`分别为id和name`,async ()=>{
let tableInfo = await query.desc(tableName)
let columnA = tableInfo[0],
columnB = tableInfo[1];
assert.equal('id',columnA.Field);
assert.equal('name',columnB.Field);
})
})
describe('#count()',async ()=>{
it(`查询表${tableName}数量为0条`,async ()=>{
let count = await query.search(tableName).count();
assert.equal(0,count);
})
})
describe('#insert()',async ()=>{
it('插入一条记录成功',async ()=>{
await query.search(tableName).insert({
id : '1',
name :'testName'
});
let count = await query.search(tableName).count();
assert.equal(1,count);
});
it('批量插入两条记录成功',async ()=>{
await query.search(tableName2).insert([
{id : '2',title : 'testA',pid : '1'},
{id : '3',title : 'testB',pid : '1'}
]);
let count = await query.search(tableName2).count();
assert.equal(2,count);
})
});
describe('#get()',()=>{
it('获得主表第一条记录name==testName',async ()=>{
let obj = await query.search(tableName).where({id : '1'}).get();
assert.equal('testName',obj.name);
})
})
describe('#update()',()=>{
it('更新主表name为updateName',async ()=>{
await query.search(tableName).where({id :'1'}).update({name : 'updateName'});
let obj = await query.search(tableName).where({id : '1'}).get();
assert.equal('updateName',obj.name);
})
});
describe('#list()',()=>{
it('简单查询,从表记录为2条',async ()=>{
let list = await query.search(tableName2).list();
assert.equal(2,list.length);
});
it('简单查询(按照id排序)从表记录第二条name为testA',async ()=>{
let list = await query.search(tableName2).order({column : 'id',order : 'desc'}).list();
let obj = list[1];
assert.equal('testA',obj.title);
});
it('从表关联主表查询主表name',async ()=>{
let list = await query.search(tableName2).join(tableName,{
alias : 't1',join : [{main : 'pid',foreign : 'id'}]
}).list();
assert.equal('updateName',list[0].name);
})
it('从表查询条件:title like test',async()=>{
await query.search(tableName2).insert([
{id : '4',title:'likeA',pid : '2'},
{id : '5',title : 'likeB',pid : '3'}
]);
let count = await query.search(tableName2).where({title : {like : true,value : '%test%'}}).count();
assert.equal(2,count);
})
it('从表查询条件为or,title like like 或 pid =3 ',async ()=>{
let count = await query.search(tableName2).where({pid : '3'}).or({title : {like : true,value : '%test%'}}).count();
assert.equal(3,count);
});
it('排序并分页,从第二个开始每两个一页,获得第二个数据为likeA',async ()=>{
let list = await query.search(tableName2).order({column : 'id',order : 'asc'}).limit(1,2).list();
let obj = list[1];
assert.equal('likeA',obj.title);
})
})
describe('#delete()',()=>{
it('删除主表的所有记录',async ()=>{
await query.search(tableName).delete();
let count = await query.search(tableName).count();
assert.equal(0,count);
})
it('删除从表的pid=1的记录,剩余2',async ()=>{
await query.search(tableName2).where({pid : '1'}).delete();
let count = await query.search(tableName2).count();
assert.equal(2,count);
})
it('清空从表所有记录',async ()=>{
await query.search(tableName2).delete();
let count = await query.search(tableName2).count();
assert.equal(0,count);
})
})
describe('#query()',()=>{
it('删除两个表,查询报错[ER_NO_SUCH_TABLE]',async ()=>{
let sqlA = `drop table if exists ${tableName}`;
let sqlB = `drop table if exists ${tableName2}`;
await query.query([{sql :sqlA,params : []},{sql : sqlB,params : []}])
try{
let info = await query.desc(tableName)
}catch(e){
assert.equal('ER_NO_SUCH_TABLE',e.code);
}
})
})
describe('全部测试完成',()=>{
it('退出系统',()=>{
process.exit(0);
});
})
}catch(e){
console.log(e);
}
})();