2017-04-04 109 views
1

我想做一個getDbmodel方法的存根。Nodejs嘲諷方法

它在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'); 
     }); 
    }); 
}); 

爲什麼總是進入basemodelsgedbmodel而不是嘲笑嗎?

我想模擬getdbmodel方法。

回答

1

嘗試在proxyquire中使用noCallThru函數: proxyquire.noCallThru().load('../../src/Libraries/ABTest', stubs).default