Node.js 摩卡异步测试超时
嗨,我是新的测试与摩卡更不用说异步测试。运行此测试时,我不断遇到以下错误。我花了很多时间在网上研究解决方案,但运气不好 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,确保调用“done()”;如果返回承诺,请确保它已解决Node.js 摩卡异步测试超时,node.js,unit-testing,mocha.js,Node.js,Unit Testing,Mocha.js,嗨,我是新的测试与摩卡更不用说异步测试。运行此测试时,我不断遇到以下错误。我花了很多时间在网上研究解决方案,但运气不好 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,确保调用“done()”;如果返回承诺,请确保它已解决 it('Should fail to create new user due to missing email', (done) => { const user_empty_email = { name: "First Name", email
it('Should fail to create new user due to missing email', (done) => {
const user_empty_email = {
name: "First Name",
email: "",
password: "password",
isAdmin: false
}
chai.request(app).post('/v1/users')
.send(user_empty_email)
.then((res) => {
expect(res).to.have.status(400);
done();
}).catch(done)
})
下面是我从/v1/users得到的一个示例响应
{
"user": {
"_id": "5de4293d3501dc21d2c5293c",
"name": "Test Person",
"email": "testemail@gmail.com",
"password": "$2a$08$8us1C.thHWsvFw3IRX6o.usskMasZVAyrmccTNBjxpNQ8wrhlBt6q",
"isAdmin": false,
"tokens": [
{
"_id": "5de4293d3501dc21d2c5293d",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZGU0MjkzZDM1MDFkYzIxZDJjNTI5M2MiLCJpYXQiOjE1NzUyMzM4NTN9.mi4YyYcHCvdYrl7OuI5eDwJ8xQyKWDcqgKsXRYtn0kw"
}
],
"__v": 1
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZGU0MjkzZDM1MDFkYzIxZDJjNTI5M2MiLCJpYXQiOjE1NzUyMzM4NTN9.mi4YyYcHCvdYrl7OuI5eDwJ8xQyKWDcqgKsXRYtn0kw"
}
为什么不尝试增加超时时间(毫秒),测试运行缓慢是正常的,尤其是当您的测试网络请求时 package.json
“测试”:“摩卡——超时10000”
为什么不尝试增加超时时间(毫秒),测试运行缓慢是正常的,尤其是在测试网络请求时
package.json
“测试”:“摩卡咖啡——超时10000”
您的端点实际运行时间是否可能超过2秒?如果是这样,您可能希望在运行Mocha:时增加超时时间
此外,端点是否返回响应?如果不是,增加超时将没有帮助。您能否将
/v1/users
端点的代码添加到您的问题中,以研究这种可能性?您的端点实际运行时间是否可能超过2秒?如果是这样,您可能希望在运行Mocha:时增加超时时间
此外,端点是否返回响应?如果不是,增加超时将没有帮助。您能否将
/v1/users
端点的代码添加到您的问题中,以研究这种可能性?对此不确定。但据我回忆,混合承诺和回调风格(done
-callback)可能会在摩卡造成这样的问题
尝试仅使用承诺:
- 从测试中删除所有
done
- 实际上
承诺(return
)return chai.request…
- 对此不太确定。但据我回忆,混合承诺和回调风格(
done
-callback)可能会在摩卡造成这样的问题
尝试仅使用承诺:
- 从测试中删除所有
done
- 实际上
承诺(return
)return chai.request…
mongoDB connect.js
它比其他人跑得早。mongoDB连接正在关闭,这导致其他测试超时。当我删除close命令时,所有测试都按预期通过了
“严格使用”;
//NPM安装猫鼬和柴。确保摩卡咖啡在全球销售
//安装
const mongoose=require('mongoose');
const Schema=mongoose.Schema;
const chai=要求(“chai”);
const expect=chai.expect;
//创建一个接受“name”对象的新架构。
//“名称”是必填字段
const testSchema=新模式({
名称:{type:String,必需:true}
});
//mongoose连接选项
变量选项={
useNewUrlParser:true,
useUnifiedTopology:正确
}
//创建名为“Name”的新集合
const Name=mongoose.model('Name',testSchema);
描述('数据库测试',函数()){
//开始测试之前,请创建沙盒数据库连接
//一旦建立了连接,调用done()
在(功能)之前(完成){
//猫鼬mongodb://localhost:27017",选择),;
猫鼬mongodb://ip/testDatabase",选择),;
const db=mongoose.connection;
db.on('error',console.error.bind(console,'connection error'));
db.once('open',function(){
log('我们已连接到测试数据库!');
完成();
});
});
描述('测试数据库',函数()){
//使用'name'值'Mike'保存对象
它('保存到测试数据库的新名称',函数(完成){
var testName=Name({
名字:“迈克”
});
testName.save(完成);
});
它('不要将不正确的格式保存到数据库',函数(完成){
//试图用错误信息保存。应触发错误
var错误保存=名称({
notName:'不是Mike'
});
错误保存。保存(错误=>{
if(err){return done();}
抛出新错误('应生成错误!');
});
});
它('应该从测试数据库中检索数据',函数(完成){
//查找以前保存的“Mike”对象。
Name.find({Name:'Mike'},(呃,Name)=>{
if(err){throw err;}
如果(name.length==0){抛出新错误('No data!');}
完成();
});
});
});
//所有测试完成后,删除数据库并关闭连接
之后(功能(完成){
mongoose.connection.db.dropDatabase(function()函数){
猫鼬。连接。关闭(完成);
});
});
});
问题在于此测试:
mongoDB connect.js
它在其他测试之前运行。mongoDB连接正在关闭,这导致其他测试超时。当我删除close命令时,所有测试都按预期通过
“严格使用”;
//NPM安装猫鼬和柴。确保摩卡咖啡在全球范围内销售
//安装
const mongoose=require('mongoose');
const Schema=mongoose.Schema;
const chai=要求(“chai”);
const expect=chai.expect;
//创建一个接受“name”对象的新架构。
//“名称”是必填字段
const testSchema=新模式({
名称:{type:String,必需:true}
});
//mongoose连接选项
变量选项={
useNewUrlParser:true,
useUnifiedTopology:正确
}
//创建名为“Name”的新集合
const Name=mongoose.model('Name',testSchema);
描述('数据库测试',函数()){
//开始测试之前,请创建沙盒数据库连接
//一旦建立了连接,调用done()
在(功能)之前(完成){
//猫鼬mongodb://localhost:27017",选择),;
猫鼬mongodb://ip/testDatabase",选择),;
const db=mongoose.connection;
db.on('error',console.error.bind(console,'connection error'));
db.once('open',function(){
console.log('我们已连接