Javascript 链式API';s和Jest期望

Javascript 链式API';s和Jest期望,javascript,node.js,unit-testing,jestjs,objection.js,Javascript,Node.js,Unit Testing,Jestjs,Objection.js,我目前有一个express应用程序,它在控制器上执行一系列逻辑。 其中一个步骤是向DB插入一条记录(它使用ObjectionJS模型) 为了模拟模型,我做了以下工作: let mockUser = { query: jest.fn(() => { return mockUser; }), insert: jest.fn(() => { return mockUser; }), toJSON: jest.fn() }; 有了这个,我想做一个断言:

我目前有一个express应用程序,它在控制器上执行一系列逻辑。 其中一个步骤是向DB插入一条记录(它使用ObjectionJS模型)

为了模拟模型,我做了以下工作:

let mockUser = {
  query: jest.fn(() => {
    return mockUser;
  }),
  insert: jest.fn(() => {
    return mockUser;
  }),
  toJSON: jest.fn()
};
有了这个,我想做一个断言:

expect(mockUser.query().insert).toBeCalledWith({ some: 'data' });
我好像错过了什么。当我运行测试时,代码将到达模拟函数insert。但是开玩笑的抱怨

您可以使用返回
上下文

例如

index.js

导出异步函数主(用户){
const trx=‘trx’;
const userData={};
let user=wait user.query(trx).insert(userData);
返回user.toJSON();
}
index.test.js

从“/”导入{main};
描述('47953161',()=>{
它('should pass',async()=>{
让mockUser={
查询:jest.fn().mockReturnThis(),
插入:jest.fn().mockReturnThis(),
toJSON:jest.fn().mockResolvedValueOnce({id:1}),
};
const实际=等待主(mockUser);
expect(实际).toEqual({id:1});
expect(mockUser.query).toBeCalledWith('trx');
expect(mockUser.query().insert).toBeCalledWith({});
expect(mockUser.query().insert().toJSON).tobeCalledTime(1);
});
});
单元测试结果和覆盖率报告:

通过src/stackoverflow/47953161/index.test.ts(10.41s)
47953161
✓ 应通过(7毫秒)
----------|----------|----------|----------|----------|-------------------|
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s|
----------|----------|----------|----------|----------|-------------------|
所有文件| 100 | 100 | 100 | 100 ||
index.ts | 100 | 100 | 100 | 100 ||
----------|----------|----------|----------|----------|-------------------|
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:12.783s,估计13s
源代码:

expect(mockUser.query().insert).toBeCalledWith({ some: 'data' });