Как написать модульный тест для cassandra выполнить запрос в nodejs, используя Jest Framework - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь написать тестовый блок для моего кода, который выбирает кампании / данные из базы данных Cassandra.Я использую Jest Framework для моего модульного тестирования.

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);
      });
    }

Я не знаю, как сделать макет для 'db.execute', используя jest.Я ценю вашу помощь, спасибо

1 Ответ

0 голосов
/ 06 июня 2019

Вы можете макетировать db.execute, чтобы ничего не делать, и использовать макет, чтобы получить переданные ему аргументы.

Аргументы - это запрос и обратный вызов, поэтому вам просто нужно проверить, что запрос корректени обратный вызов работает, как и ожидалось.

Вот упрощенный рабочий пример для начала работы:

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!
})
...