单元测试pg发射器在承诺得到
Unit test pg emitter in Promise got
我正在创建一个Javascript的单元测试。这是我的代码。我有两个函数在quizHandler_getfull.js。
1. rreject:它将以相同的格式处理错误。
2. getquizid:它先进行查询,然后发出信号。
下一个文件是单元测试文件。我使用mocha框架与proxyquire。我已经创建了客户端对象,然后放入目标函数。
然而,我得到了错误提到的参考。
我怀疑client.query()从来没有被单元测试人员调用过。
我遗漏了什么?
quizHandler_getfull.js :
exports.rreject = function(error,pid){
//pid = product id
var data = { success : false,
id : pid ,
reason : { errmsg : error.detail,
errid : error.code}};
console.log('error');
return data;
};
exports.getquizid = function(client,pid){
return new Promise(function(fulfill,reject){
var qstr = "SELECT quiz_id, to_char(maxtime, 'HH24:MI:SS') as maxtime, subject_id, author_id, description, difficulty, name, product_id, to_char(lastmodified at time zone 'utc', 'YYYY-MM-DD'
'"T'"HH24:MI:SSZ') as lastmodified FROM dugong.quiz WHERE product_id = $1";
var qzid = client.query(qstr,[pid]);
qzid.on('error',function(err){
console.log('error');
console.log('getquizid function');
console.log(err);
var data = exports.rreject(err,pid);
reject(data);
});
qzid.on('row',function(row){
fulfill(row);
});
qzid.on('end',function(row){
if(row.rowCount == 0 ){
var err = { detail : 'ID not found',
code : 'Quiz_101'};
reject(err);
}
});
});
};
quizHandler_getfull.test.js :
var httpMocks = require('node-mocks-http');
var test = require('unit.js');
var assert = require('assert');
var real_quizHandler = require('../../routes/quizHandler_getfull.js');
var proxyquire = require('proxyquire')
, pgStub = { };
var quizHandler_getfull, response, request
describe('quizHandler_getfull : ', function () {
beforeEach(function(){
request = httpMocks.createRequest({
method: 'GET',
url: '/quizzes/full',
params : {id : 1}
});
pgStub.end = function(){};
quizHandler_getfull = proxyquire('../../routes/quizHandler_getfull.js', { 'pg' : pgStub} );
response = httpMocks.createResponse();
});
it('getquizid should show query error. If database rejects query.', function (done) {
var client = {};
client.query = function(querystr, pid){
var emitter = new events.EventEmitter();
setTimeout(function(){
emitter.emit('error', {detail: 'This is fake query error', code : 'error666'})
},0);
console.log('hi there');
return emitter;
};
//Memo : put anonymous done() to avoid conflict with mocha's done.
Promise.all([quizHandler_getfull.getquizid(client,1)]).then(
//function fulfill(output){},
null,
function reject(er){
console.log('before done');
console.log(er);
console.log('done here');
done();
}
);
});
});
My error:
before done
[ReferenceError: events is not defined]
done here
似乎你没有导入事件。根据node.js文档,它必须是这样的:
var EventEmitter = require('events');
https://nodejs.org/api/events.html 相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 我怎样才能获得承诺的价值
- 延期承诺值未更新/解析/延期
- 在承诺链中处理早期回报的最佳方式
- 承诺在非节点式回调上使用Bluebird
- 简单的ES6承诺问题-交换解决和拒绝参数
- 组合承诺和非承诺值
- 带有对象/原型的链式承诺(Q延期)
- AngularJS$q承诺使用socket.io
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 当一些承诺失败时,如何继续使用$q.all()
- Nodejs和express路由,如何处理客户端的承诺
- 如何在多承诺链中处理谷歌地图API V3事件
- 承诺合并流
- NodeJS和pg promise,捕获PostgreSQL异常
- JavaScript承诺-无法读取属性'那么'的未定义
- Pg承诺性能提升:在冲突中
- 单元测试pg发射器在承诺得到