无法在Sinon单元测试firebase功能

时间:2018-05-02 10:53:13

标签: javascript node.js firebase sinon sinon-chai

我正在尝试使用mocha,chai,sinon对包含firebase查询的JavaScript承诺进行单元测试。我试图使用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();
});
});

任何人都可以指出我出错的地方,并指出我正确的方向。

感谢。

0 个答案:

没有答案