Javascript 在jest中运行异步测试时获取超时错误
这是我正在开玩笑地编写单元测试的代码:Javascript 在jest中运行异步测试时获取超时错误,javascript,node.js,unit-testing,asynchronous,jestjs,Javascript,Node.js,Unit Testing,Asynchronous,Jestjs,这是我正在开玩笑地编写单元测试的代码: import { Connector, DbConnector } from "@custom/connector"; // package contains mongodb operations. export class DBService { private connector: Connector; constructor() { this.connector = DbConnector.getInstance(); th
import { Connector, DbConnector } from "@custom/connector"; // package contains mongodb operations.
export class DBService {
private connector: Connector;
constructor() {
this.connector = DbConnector.getInstance();
this.connector.connect();
}
public async saveData() {
return this.connector.update(collName, condition, update, options).then(() => {
// logger
});
}
}
单元测试:
import { Connector, DbConnector } from "@custom/connector";
import DBService from "service.ts";
it("success", async () => {
const db = new DBService ();
const records = { ok: 1 };
jest.spyOn(DbConnector, "getInstance").mockImplementation((): any => {
return {
connect() { return Promise.resolve(); },
update() { return Promise.resolve(records); },
};
});
expect(await db.saveData()).resolves.toEqual(records); // Not sure what to do here
});
当我运行时,出现以下错误:
Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error:
有人能帮我找到我失踪的地方吗?任何帮助都将不胜感激
提前感谢。以下是单元测试解决方案:
dbService.ts
:
从“/DbConnector”导入{Connector,DbConnector};
导出类DBService{
专用连接器:连接器;
构造函数(){
this.connector=DbConnector.getInstance();
this.connector.connect();
}
公共异步存储数据(){
const collName='collName';
const condition=‘condition’;
常量更新={};
常量选项={};
返回此.connector.update(collName、条件、更新、选项)。然后((reconds)=>{
返回侦察;
});
}
}
dbConnector.ts
:
导出接口连接器{
connect():void;
更新(名称、条件、更新、选项):承诺;
}
导出类DbConnector实现连接器{
公共静态连接器:连接器;
公共静态getInstance(){
如果(此连接器){
返回此.connector;
}
this.connector=new DbConnector();
返回此.connector;
}
私有构造函数(){}
公共连接(){
log('connecttodb');
}
公共异步更新(名称、条件、更新、选项){
返回“真实更新”;
}
}
dbService.test.ts
:
从“/DBService”导入{DBService};
从“/DbConnector”导入{DbConnector};
描述('61815803',()=>{
它('should pass',async()=>{
常量记录={ok:1};
常量dbConnectorMock={
connect:jest.fn(),
更新:jest.fn().mockResolvedValueOnce(记录),
};
spyOn(DbConnector,'getInstance').mockReturnValueOnce(dbConnectorMock);
const dbService=new dbService();
const actual=await dbService.saveData();
expect(实际).toEqual({ok:1});
expect(DbConnector.getInstance).toBeCalledTimes(1);
期望(dbConnectorMock.connect).toBeCalledTimes(1);
expect(dbConnectorMock.update).toBeCalledWith('collName','condition',{},{});
});
});
单元测试结果和覆盖率报告:
PASS stackoverflow/61815803/dbService.test.ts(10.698s)
61815803
✓ 应通过(6ms)
----------------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------------|---------|----------|---------|---------|-------------------
所有文件| 76 | 0 | 55.56 | 73.91 |
dbConnector.ts | 50 | 0 | 20 | 45.45 | 9-13,17,20
dbService.ts | 100 | 100 | 100 | 100 |
----------------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:12.495s
您可能希望为jestjs全局设置超时
配置,如:
jest.setup.js
:
jest.setTimeout(10 * 1000);
jest.config.js
:
jest.setTimeout(10 * 1000);
module.exports={
预设:'ts jest/presets/js with ts',
测试环境:“节点”,
SetupFileAfterEnv:[
“./jest.setup.js”,
]
}