Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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中运行异步测试时获取超时错误_Javascript_Node.js_Unit Testing_Asynchronous_Jestjs - Fatal编程技术网

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”,
]
}