Внедрение зависимостей NodeJS для тестирования leveldb с require-inject - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть простой модуль-обертка, который я использую для доступа к Level DB.

Я пытаюсь написать какой-нибудь тест, используя mocha, chai, sinon и require-inject. Что бы я хотел проверить, чтобы функции LevelDB вызывались с правильными параметрами.Я пробовал несколько различных комбинаций для настройки require-inject, однако, похоже, что ложные / шпионские программы, которые я передаю, приводят к сбою тестов.Кто-нибудь знает, что я делаю не так?

Тестовый код

const expect = require('chai').expect;
const sinon = require('sinon');
const requireInject = require('require-inject');

let putSpy = sinon.spy();
let getSpy = sinon.spy();

const starDB = requireInject('./star_db', {
  'level' : () => ({
      put: sinon.stub().resolves(putSpy),
      get: sinon.stub().resolves(getSpy)
    })
});

describe('star db', () => {

  afterEach(() => {
    putSpy.resetHistory();
    getSpy.resetHistory();
  });

  it('Given add called then the put method on the db should be called', () => {
    const key = 1;
    const value = 2;

    starDB.add(key, value);
    console.log('putSpy');

    expect(putSpy.calledWith(key, value)).to.be.true;
  });

  it.skip('given a key does not exist in the db then it should return an empty object', async () => {
    const result = await starDB.get('KeyDoesNotExist');

    expect(result).to.deep.equal({});
  });
});

Код оболочки LevelDB

const level = require('level');
const dbName = './.verification_data';
const db = level(dbName);

const add = async (key, value) => {
  await db.put(key, JSON.stringify(value));
};

const get = async (key) => {
  let value = await db.get(key)
    .then(result => {
      return JSON.parse(result);
    })
    .catch(error => {
      console.log('unhandledRejection', error);
      return {};
    });

  return value;
};

module.exports = {
  add,
  get
}

Ошибка, которую я получаю в настоящее время,

unhandledRejection SyntaxError: Unexpected token s in JSON at position 0
    at JSON.parse (<anonymous>)
    at db.get.then.result (./db_wrapper.js:12:19)
    at <anonymous>
...