首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用proxyquire模拟MongoDB

用proxyquire模拟MongoDB
EN

Stack Overflow用户
提问于 2016-01-15 17:34:07
回答 1查看 764关注 0票数 2

我想通过在我的测试中这样做来模拟MongoDB依赖于丙氧奎尔

代码语言:javascript
复制
var proxyquire = require('proxyquire');
var controller = path.resolve('.path/to/controller/file.js');

在每个语句之前的中:

代码语言:javascript
复制
mocked_mongoose = {
     isMocked: true,
     model: function(name, schema, collection, skipInit) {
         return {
             find: function(conditions, projection, options, callback) {
                 console.log('callback find');
                 return callback();
             },
             save: function(options, fn) {
                 console.log('callback save');
                 return callback();
             },
             findOne: function(conditions, projection, options, callback) {
                 console.log('callback find one');
                 var model = mongoose.model(name);
                 var fakeModel = fakery.fake(model);
                 return callback(null, fakemodel);
             }
         }
     }
 };

proxyquire(controller, {
     'mongoose': mocked_mongoose
 });

当我转到控制器并执行console.log(mongoose.isMocked)时,我得到了未定义的信息,如果我打印mongoose.model.toString(),看起来就好像不会覆盖猫鼬方法。

我跟踪了这篇文章,并试图实现相同的逻辑,但没有得到相同的结果。

任何帮助都将不胜感激,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-21 15:21:48

最后,我改变了定义模拟猫鼬对象的方式,以与我想在mt中测试的场景完全匹配:

第一模型实例化

代码语言:javascript
复制
var Model = mongoose.model('SchemaDef');
var other = Model({
 _id:'someId'
 name'Some other fields'
});

模型搜索:

代码语言:javascript
复制
Model.findOne(query, callback);

这就是它的工作方式:

代码语言:javascript
复制
'use strict';
var factory = require('factory-girl');
var mongoose = require('mongoose');

    function viewModel(name){
        function constructor(obj){
            if(obj){
                obj.find = constructor.find;
                obj.save = constructor.save;
                obj.findOne = constructor.findOne;
            }
            return obj;

        };
        constructor.isMocked = true;
        constructor.find = function(query, callback){
            factory.build(name, function(err, mockedModel){
                return callback(null,[mockedModel]);
            });

        };

        constructor.save = function(callback){
            factory.build(name, function(err, mockedModel){
                return callback(null,[mockedModel]);
            });
        };

        constructor.findOne=function(query,callback){
            factory.build(name, function(err, mockedModel){
                return callback(null,mockedModel);
            });
        };

        return constructor;
    };

module.exports = {
    model:function(name){
        factory.define(name, mongoose.model(name));
        return viewModel(name);
    }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34816660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档