Невозможно выполнить модульное тестирование функции firebase в Sinon - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь выполнить модульное тестирование обещания JavaScript, содержащего запрос к базе данных, используя mocha, chai, sinon. Я пытаюсь смоделировать базу данных с помощью sinon, а не на самом деле сделать запрос к базе данных. Однако я не могу реализовать это правильно.

Вот мое обещание в файле '/ services / pr_services:

exports.getUserInfo = (userId) => {
return new Promise((resolve, reject) => {
    const userProfile = {};
    const userProfileRef = database.ref('profiles').child(userId);
    userProfileRef.once('value', (snap) => {
        if (snap.exists()) {
            const userProfileData = snap.val();
            resolve(userProfile);
        } else {
            reject();
        }
    });
});
};

Переменная database содержит конфигурацию базы данных, такую ​​как учетные данные, URL базы данных и т. Д.

Вот мой код для теста:

 const chai = require('chai');
 const sinon = require('sinon');
 const admin = require('firebase-admin');
 const database = require('../database');
 const services = require('../services/pr_services');


const should = chai.should();

describe('Database functions', () => {
let adminInitStub;

before(() => {
    adminInitStub = sinon.stub(admin, 'initializeApp');
});

describe('get profile info', () => {
    it('should return a non empty object', (done) => {

        beforeEach(() => {
            services.getUserInfo = sinon.stub();
        });

        afterEach(() => {
            services.getUserInfo.reset();
        });

        const userId = 'jim123';
        const snap = {
            name: 'Jim Dani',
            address: 'Porto'
        };
        const userProfileRef = database.ref('profiles').child(userId);
        userProfileRef.once('value').returns(Promise.resolve(snap));

        services.getUserInfo
            .then(info => {
                info.should.be.a('object');
                info.should.equal(snap);
                done();
            })
            .catch(err => {
                should.not.exist(err);
                done();
            });
    });
});


after(() => {
    adminInitStub.restore();
    test.cleanup();
});
});

Может кто-нибудь указать, где я иду не так, и любезно указать мне в правильном направлении.

Спасибо.

...