Использование Jest для проверки анонимной функции внутри стороннего модуля - PullRequest
0 голосов
/ 16 октября 2018

У меня есть довольно простой модуль, который использует модуль pg (node-postgre lib), я хотел бы реализовать тест Jest, и во время насмешек над модулем pg я хотел бы запустить его функцию обратного вызова, чтобы увидеть, как работает console.logи мой обратный вызов вызывается

Я издевался над модулем и пытался шпионить и заменить метод 'запроса', но он потерпел неудачу и сломался, любая идея, что я делаю неправильно?

Тестовый объект:

import {Pool} from 'pg';

const pool = new Pool();

module.exports = {
  query: (text, params, callback) => {
    const start = Date.now();

    return pool.query(text, params, (err, res) => {
      const duration = Date.now() - start;
      console.log('executed query', {text, duration, rows: res.rowCount});
      callback(err, res);
    });
  }
};

Тест:

jest.mock('pg');

import module from './index';
import { Pool } from 'pg'

beforeAll(() => {
  Pool.mockImplementation(()=>{return jest.fn()});
});


  it('callback is called', () => {
    const cb = (err, res) => true;
    const query = jest.spyOn(Pool, "query");         // <---- Not right, Error
    query.mockImplementation((a,b,c) => c({},{}));
    const resolve = module.query('QUERY TEXT', { a: 1, b: 2}, cb);
    resolve();                                       // <---- Not what I expect
    expect(cb).toBeCalled();
  });
});

Сгенерирована ошибка: Ошибка: невозможно отслеживать свойство запроса, поскольку оно не является функцией;вместо этого дано неопределенное значение

  20 |   it('callback is called', () => {
  21 |     const cb = (err, res) => true;
> 22 |     const query = jest.spyOn(Pool, "query");
     |                        ^
  23 |     query.mockImplementation((a,b,c) => c({},{}));
  24 |     const resolve = module.query('QUERY TEXT', { a: 1, b: 2}, cb);
  25 |     resolve();

  at ModuleMockerClass.spyOn (node_modules/jest-mock/build/index.js:697:15)
  at Object.spyOn (src/db/index.test.js:22:24)

Спасибо

...