首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs模拟方法

Nodejs模拟方法
EN

Stack Overflow用户
提问于 2017-04-04 19:29:20
回答 1查看 433关注 0票数 2

我想创建一个getDbmodel方法的存根。

它在basemodel.js中定义,它是

代码语言:javascript
复制
import Sequelize from 'sequelize';
import db from '../../config/database';
let instance = null;

class Database {

    static getDbmodel = () => {
        if (instance != null) {
            return instance;
        }
        instance = new Sequelize(db.default.database, db.default.username, db.default.password, {
            host: db.default.host,
            dialect: db.default.dialect,
            define: {
                timestamps: false, // true by default
            },
            pool: {
                max: db.default.maxConnections,
                min: db.default.minConnections,
                idle: db.default.idleTimeoutMillis,
                timezone: '+00:00',
            },

        });
console.log('inside basemodel');
        return instance;
    }
}

export { Database as default };

//   ========================================================

//   src/Libraries/ABTest.js

import ABTestStorage from '../Storage/ABTest';

class ABTestLib {


    getABTestById = id => ABTestStorage.getABTestById(id);

    getABTests = () => ABTestStorage.getABTests().then()
        .catch(err => console.log(err))

    save = abtestObj => ABTestStorage.saveABTest(abtestObj).then()
        .catch(err => console.log(err))

    put = abtestObj => ABTestStorage.updateABTest(abtestObj)
        .then()
        .catch(err => console.log(err))

    delete = id => ABTestStorage.destroyABTestById(id).then()
        .catch(err => console.log(err))
}

export default ABTestLib;

abtest.js引入了ab测试模型,该模型又导入了basemodel

这是我的测试文件:

代码语言:javascript
复制
import chai from 'chai';
const SequelizeMock = require('sequelize-mock');
var proxyquire = require('proxyquire');

describe('Libraries/ABTest.js', () => {
    before(function () {
        let instance = null;

        class Database {
            static getDbmodel = () => {
                if (instance != null) {
                    return instance;
                }
                instance = new SequelizeMock();
                console.log(instance);
                return instance;
            }
        }

    });
    var stubs = {
        '../..src/Libraries/BaseModel': {
            getDbmodel: function () {
                console.log('3444e4');

                if (instance != null) {

                    console.log('1111');
                    return instance;

                }
                instance = new SequelizeMock();
                console.log(instance);
                return instance;
            }
        }
    };
    const ABTests = proxyquire('../../src/Libraries/ABTest', stubs);
    console.log(ABTests);
    const abtest = new ABTests.default();

    it('get(1): should return response for a abtest', () => {
        abtest.getABTestById(1).then((res) => {
            chai.expect(res).to.be.an('object');
        });
    });

    it('getAll() : should return response and status 200 for all abtests', () => {
        abtest.getABTests().then((res) => {
            chai.expect(res).to.be.an('object');
        });
    });

    it('save() : should return response and status 200 for a abtest', () => {
        abtest.save({ id: '500', name: 'home', code: 'home', id_organization: '1', id_platform: '1', }).then((res) => {
            chai.expect(res).to.be.an('object');
        });
    });

    it('put() : should return response and status 200 for a abtest', () => {
        abtest.put({ id: '2', }).then((res) => {
            chai.expect(res).to.be.an('object');
        });
    });

    it('delete() : should return response and status 200 for a abtest', () => {
        abtest.delete({ id: '111', }).then((res) => {
            chai.expect(res).to.be.an('object');
        });
    });
});

为什么它总是进入basemodels gedbmodel,而不是被嘲笑的那个?

我想模拟一下getdbmodel方法。

EN

回答 1

Stack Overflow用户

发布于 2017-04-04 20:05:07

尝试在proxyquire中使用noCallThru函数:proxyquire.noCallThru().load('../../src/Libraries/ABTest', stubs).default

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

https://stackoverflow.com/questions/43205957

复制
相关文章

相似问题

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