打字稿 + 摩卡/柴 - 对于异步测试和钩子,请确保调用"done()";如果返回承诺,请确保它解决



我知道这种问题由来已久。但我已经尝试了所有的方法,但我无法解决这个问题。

错误为

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

我已经尝试设置一个大的超时。但这种解决方案也不起作用。

遵循我的代码和访问mongo的类。

import { expect } from 'chai';
import { UserService } from "./../services/userService";
describe('Testar Usuario Service', () => {

describe('Método GET Teste', () => {
const userService = new UserService();
const users = userService.getTeste();
it('Deve retornar uma lista de nomes', () => {
expect(users).to.be.an('array');
});
});
describe('Method GET All Users', () => { //the error happen here

it('Deve retornar uma lista com todos os Usuários', (done) => {
const userService = new UserService();
return userService.getAllUsers().then(result => {
expect(result).to.be.an('array');
done();
}).catch((error) => {
done(error);
})

});
});

});
import { UserSchema } from '../models/userModel';
import * as mongoose from 'mongoose';
import {Request, Response} from "express";
const User = mongoose.model('User', UserSchema);
export class UserService {
public getTeste() {
const text = [{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }];
return text;
}
public async getAllUsers() {
try {
const users = await User.find({});
return users;
} catch (err) {
throw new Error('Erro de conexão');
}
}
public async insertUser(req: Request) {
const newUser = new User(req.body); 
try {
await newUser.save();
} catch (err) {
throw new Error('Erro de conexão');
}
}
public async updateUser(req: Request) {
try {
const user = await User.findOneAndUpdate(
{cpf: req.body.cpf},
req.body,
{ new: true }
);
return user;
} catch (err) {
throw new Error('Erro de conexão');
} 
}
public async getUser(req: Request) {
try {
const user = await User.findOne({cpf: req.params.cpf});
return user;
} catch (err) {
throw new Error('Erro de conexão');
}
}
public async deleteUser(req: Request) {
try {
const user = await User.findOneAndDelete({cpf: req.params.cpf});
return user;
} catch (err) {
throw new Error('Erro de conexão');
}
}
}

我也可以分享我的package.json和tsconfig.json。如果有人能帮我,我将不胜感激。

根据文档,您需要返回promise或使用done()回调。

因此,要么删除返回:

describe('Method GET All Users', () => { //the error happen here
it('Deve retornar uma lista com todos os Usuários', (done) => {
const userService = new UserService();
userService.getAllUsers().then(result => {
expect(result).to.be.an('array');
done();
}).catch((error) => {
done(error);
})     
});
});

或者使用async/await语法:

describe('Method GET All Users', () => { //the error happen here
it('Deve retornar uma lista com todos os Usuários', async () => {
const userService = new UserService();
const result = await userService.getAllUsers();
expect(result).to.be.an('array');
});
});

相关内容

  • 没有找到相关文章

最新更新