Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Jest测试mongoose.connect回调方法_Javascript_Node.js_Express_Mongoose_Jestjs - Fatal编程技术网

Javascript 如何使用Jest测试mongoose.connect回调方法

Javascript 如何使用Jest测试mongoose.connect回调方法,javascript,node.js,express,mongoose,jestjs,Javascript,Node.js,Express,Mongoose,Jestjs,我已经开始制作一个新的Express应用程序,选择的测试框架是Jest 除了调用mongoose.connect方法之外,我已经设法涵盖了每一行代码: 我尝试监视mongoose对象的connect方法,因此我可以指定返回的对象,但没有效果 有没有办法测试mongoose.connect的回调?这是解决方案,你的代码不容易测试,所以我做了一些重构 index.ts: import mongoose,{mongoose}来自“mongoose”; 从“mongodb”导入{MongoError}

我已经开始制作一个新的Express应用程序,选择的测试框架是Jest

除了调用
mongoose.connect
方法之外,我已经设法涵盖了每一行代码:

我尝试监视
mongoose
对象的
connect
方法,因此我可以指定返回的对象,但没有效果


有没有办法测试
mongoose.connect的回调?

这是解决方案,你的代码不容易测试,所以我做了一些重构

index.ts

import mongoose,{mongoose}来自“mongoose”;
从“mongodb”导入{MongoError};
函数回调(错误?:MongoError){
如果(错误){
控制台日志(错误消息);
}否则{
console.log('successfully Connected!');
}
}
函数connectDatabase():Promise{
const mongoUrl='localhost';
返回mongoose.connect(mongoUrl,{useCreateIndex:true,useNewUrlParser:true},exports.callback);
}
exports.callback=回调;
exports.connectDatabase=connectDatabase;
单元测试:

import mongoose,{mongoose,ConnectionOptions}来自“mongoose”;
从“mongodb”导入{MongoError};
开玩笑。模仿(“猫鼬”);
描述('connectDatabase',()=>{
const dbModule=require('./');
它('应成功连接数据库',完成=>{
const consoleLogSpyOn=jest.spyOn(控制台,'log');
const mongooseConnectSpyOn=开玩笑
.spyOn(猫鼬,“连接”)
.mockImplementationOnce((URI:字符串,选项?:连接选项,回调?:(错误?:MongoError)=>void)=>{
如果(回调){
回调();
完成();
}
返回承诺。解决(猫鼬);
});
dbModule.connectDatabase();
期待(mongooseConnectSpyOn)。与(
'本地主机',
{useCreateIndex:true,useNewUrlParser:true},
dbModule.callback
);
期望(consoleLogSpyOn).toBeCalledWith('successfully Connected!');
consoleLogSpyOn.mockRestore();
});
它('连接数据库错误',完成=>{
const consoleLogSpyOn=jest.spyOn(控制台,'log');
const mongooseConnectSpyOn=开玩笑
.spyOn(猫鼬,“连接”)
.mockImplementationOnce((URI:字符串,选项?:连接选项,回调?:(错误?:MongoError)=>void)=>{
如果(回调){
回调(新错误(“连接错误”);
完成();
}
返回承诺。解决(猫鼬);
});
dbModule.connectDatabase();
期待(mongooseConnectSpyOn)。与(
'本地主机',
{useCreateIndex:true,useNewUrlParser:true},
dbModule.callback
);
expect(consoleLogSpyOn).toBeCalledWith('connect error');
consoleLogSpyOn.mockRestore();
});
});
单元测试结果和覆盖率报告:

PASS src/stackoverflow/56132437/index.spec.ts
连接数据库
✓ 应成功连接数据库(12毫秒)
✓ 连接数据库错误(1ms)
console.log node_modules/jest mock/build/index.js:860
成功连接!
console.log node_modules/jest mock/build/index.js:860
连接错误
----------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
index.ts | 100 | 100 | 100 | 100 ||
----------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:1.853s,估计5s


这是完整的演示:

这是解决方案,您的代码不容易测试,因此我进行了一些重构

index.ts

import mongoose,{mongoose}来自“mongoose”;
从“mongodb”导入{MongoError};
函数回调(错误?:MongoError){
如果(错误){
控制台日志(错误消息);
}否则{
console.log('successfully Connected!');
}
}
函数connectDatabase():Promise{
const mongoUrl='localhost';
返回mongoose.connect(mongoUrl,{useCreateIndex:true,useNewUrlParser:true},exports.callback);
}
exports.callback=回调;
exports.connectDatabase=connectDatabase;
单元测试:

import mongoose,{mongoose,ConnectionOptions}来自“mongoose”;
从“mongodb”导入{MongoError};
开玩笑。模仿(“猫鼬”);
描述('connectDatabase',()=>{
const dbModule=require('./');
它('应成功连接数据库',完成=>{
const consoleLogSpyOn=jest.spyOn(控制台,'log');
const mongooseConnectSpyOn=开玩笑
.spyOn(猫鼬,“连接”)
.mockImplementationOnce((URI:字符串,选项?:连接选项,回调?:(错误?:MongoError)=>void)=>{
如果(回调){
回调();
完成();
}
返回承诺。解决(猫鼬);
});
dbModule.connectDatabase();
期待(mongooseConnectSpyOn)。与(
'本地主机',
{useCreateIndex:true,useNewUrlParser:true},
dbModule.callback
);
期望(consoleLogSpyOn).toBeCalledWith('successfully Connected!');
consoleLogSpyOn.mockRestore();
});
它('连接数据库错误',完成=>{
const consoleLogSpyOn=jest.spyOn(控制台,'log');
const mongooseConnectSpyOn=开玩笑
.spyOn(猫鼬,“连接”)
.mockImplementationOnce((URI:字符串,选项?:连接选项,回调?:(错误?:MongoError)=>void)=>{
如果(回调){
回调(新错误(“连接错误”);
完成();
}
返回承诺。解决(猫鼬);
});
dbModule.connectDatabase();
期待(mongooseConnectSpyOn)。与(
'本地主机',
{useCreateIndex:true,useNewUrlParser:true},
dbModule.callback
);
expect(consoleLogSpyOn).toBeCalledWith('c