在node.js中使用Bluebird和sinon对mongoose exec方法进行存根

时间:2016-03-03 07:05:43

标签: node.js promise mocha bluebird sinon

我有一个服务层,它调用运行查询的数据库层。我试图存根数据层返回一个值但我不断收到此错误 TypeError:User.find(...)。exec不是函数。

我正在使用bluebird模块,并且还使用sinon进行存根

//Service Layer
var dbLayer = require('../dbLayer');

exports.getUsers = function (req, res) {
    dbLayer.GetUsersThatNeedToBeApproved(req.body.domain)
        .then(function (data) {
            res.json(data);
        })
        .catch(function(error){
            routesLogger.logError(req.session.user.role, "getUsers", error);
            res.status(400).send({error: StatusCodes.DBERROR});
        });

};

//DB Layer
module.exports.GetUsersThatNeedToBeApproved = function (domain) {
return new Promise.resolve(User.find({$and: [{'domain.upgradeRequest': true}, {'domain.access': constants.ACCESSPRIVATE}, {'domain.name': domain}]}).exec())
    .then(function (data) {
        return data;
    }).catch(function (error) {
        routesLogger.logError("userDAL", "GetUsersThatNeedToBeApproved", error);
        return error;
    });

这是我的测试用例

 describe("Suite to get users in portal that need to be approved",function(){
var request = null;
var response = httpMocks.createResponse();
it("Should get a list of all users that need to be approved for a specific domain",function(done){
    request = {
        session: {
            user: {
                domain:{
                  name:'domain'
                },
                email: 'testUser@test.com',
                role: 'Admin'
            }
        }

    };

    var expectedFindResponse = [
        {
            email: "test@xxx.com",
            role: "T",
            domain:{
                upgradeRequest:true,
                access:'private',
                name:'domain'
            }
        },
        {
            "email": "test1@xxx.com",
            "role": "T",
            domain:{
                upgradeRequest:true,
                access:'private',
                name:'domain'
            }
        }
    ];

    var find = sinon.stub(mongoose.Model, "find").returns(Promise.resolve(expectedFindResponse));

    admin.getUsers(request, response);

    var responseData = response._getData();

});
});

0 个答案:

没有答案