Node.js 如何使用jest框架在nodejs中编写cassandra执行查询的单元测试

Node.js 如何使用jest框架在nodejs中编写cassandra执行查询的单元测试,node.js,typescript,jestjs,cassandra-3.0,Node.js,Typescript,Jestjs,Cassandra 3.0,我正试图针对从Cassandra数据库获取活动/数据的代码编写一个单元测试用例。 我正在使用Jest框架进行单元测试 const db = require('../../db/client'); getCampaigns(req: express.Request, res: express.Response) { db.execute('select * from campaign_definitions', (err: any, result: any) => {

我正试图针对从Cassandra数据库获取活动/数据的代码编写一个单元测试用例。 我正在使用Jest框架进行单元测试

const db = require('../../db/client');
getCampaigns(req: express.Request, res: express.Response) {
      db.execute('select * from campaign_definitions', (err: any, 
result: any) => {
        if (err) {
          logger.error(`${err.status || 500} - ${err.message} - 
${req.originalUrl} - ${req.method} - ${req.ip}`);
          return res.status(500).send(err);
        }
        res.send(result.rows);
      });
    }

我不知道如何使用jest对“db.execute”进行模拟。非常感谢您的帮助,谢谢

您可以模拟
db。执行
不执行任何操作,并使用模拟获取传递给它的参数

参数是查询和回调,所以您只需要测试查询是否正确,回调是否按预期工作

下面是一个简化的工作示例,让您开始:

import * as express from 'express';
const db = require('../../db/client');

function getCampaigns(req: express.Request, res: express.Response) {
  db.execute('select * from campaign_definitions', (err: any, result: any) => {
    res.send(result.rows);
  });
}

test('getCampaigns', () => {
  const res: any = { send: jest.fn() };
  const mock = jest.spyOn(db, 'execute');  // spy on db.execute...
  mock.mockImplementation(() => {});  // <= ...and mock the implementation

  getCampaigns({} as any, res);

  const args = db.execute.mock.calls[0];  // <= get the args passed to db.execute
  const query = args[0];
  const callback = args[1];
  callback(null, { rows: 'the rows' });  // <= call the callback

  expect(query).toBe('select * from campaign_definitions');  // Success!
  expect(res.send).toHaveBeenCalledWith('the rows');  // Success!
})
从“express”导入*为express;
const db=require('../../db/client');
函数getCampaigns(请求:快速请求,响应:快速响应){
db.execute('select*from campaign_definitions',(err:any,result:any)=>{
res.send(result.rows);
});
}
测试('getCampaigns',()=>{
const res:any={send:jest.fn()};
const mock=jest.spyOn(db,'execute');//监视db.execute。。。
mock.mockImplementation(()=>{})//