首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止proxyquire调用原始代码?

阻止proxyquire调用原始代码?
EN

Stack Overflow用户
提问于 2016-07-12 18:17:11
回答 0查看 2.5K关注 0票数 2

我正在尝试围绕mongoose模型进行测试。

我使用proxyquire完整地模拟它,但由于原始文件注册了模型,因此我得到

代码语言:javascript
复制
OverwriteModelError: Cannot overwrite `EEG` model once compiled.

既然我需要的一切都已经被proxyquire注入了,我怎么能告诉它不要加载模型呢?

要测试的代码:

代码语言:javascript
复制
var mongoose = require('mongoose');

var db = {},
    Test = require('./model/Test.js'),
    config = require('./config.json');

var dbURL = config.medical.url,
    dbName = config.medical.name;

function connect(callback) {
    db = mongoose.createConnection(dbURL + dbName);
    db.on('error', (err) => {
        callback(err);
    });
    db.once('open', function () {
        callback();
    }); 
}

function save(data, callback) {
    new Test({
        data
    }).save((err) => {
        callback(err);
    });
}

module.exports = {
    connect: connect,
    save: save
}

model/Test.js:

代码语言:javascript
复制
var mongoose = require('mongoose');

//Should not get called when proxyquired
module.exports = mongoose.model('Test', mongoose.Schema({
    date: Date,
    data: String
}));

test/test.js:

代码语言:javascript
复制
//...
describe('save', (done) => {
    it('Expect to successfully save the Test', (done) => {
        var stub = {
                Test: function Test() {
                    this.save = (callback) => {
                        callback();
                    }
                }
            },
            test = proxyquire('./../test.js', {
                './model/Test.js': stub.Test
            });

        test.save({data: 'data'}, (err) => {
            try {
                expect(err).to.not.be.ok;
                done();
            } catch(err) {
                done(err);
            }
        });
    });

    it('Expect to throw any error raised', (done) => {
        var stub = {
                Test: function Test() {
                    this.save = (callback) => {
                        callback('ERROR');
                    }
                }
            },
            //This line raise a error because Test is already compiled
            test = proxyquire('./../test.js', {
                './model/Test.js': stub.Test
            });

        test.save({data: 'data'}, (err) => {
            try {
                expect(err).to.not.be.ok;
                done();
            } catch(err) {
                done(err);
            }
        });
    });
    //...

我发现的另一种方法是在Test中使用proxyquire mongoose,并模仿它来阻止注册,但这将是大量的代码,我还有其他测试,这个模型被调用了4到5层深,所以代理查询每一层都会非常麻烦,而我可以模仿更高的函数。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38326012

复制
相关文章

相似问题

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