【问题标题】:Nodejs mocking a methodNodejs模拟一个方法
【发布时间】:2017-08-29 13:53:09
【问题描述】:

我想制作getDbmodel 方法的存根。

它在basemodel.js中定义

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 的测试模型。

这是我的测试文件:

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 方法。

【问题讨论】:

    标签: node.js proxyquire


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多