【问题标题】:sinon dependency function fakingsinon依赖函数伪造
【发布时间】:2019-02-08 10:47:55
【问题描述】:

我想伪造或存根一个不用作对象方法的函数。参见 mylib.js

//multiplicaiton.js

module.exports = function(x,y) {
  return x*y;
}

//mylib.js

let Multiplication = require('./multiplication');

let myLib = function(x,y) {
  var result = Multiplication(x,y)
  return result
}

module.exports = myLib;

//test.js

let sinon = require('sinon');
let mylib = require('./mylib');
let chai = require('chai');
let expect = chai.expect;

describe('My Test', function() {

   it('Faking Globally',function() {
     //How do I declare 'multiplication' as Globally and fake it.
     expect(mylib(2,3)).to.deep.equal(6);
   })

})

【问题讨论】:

    标签: javascript unit-testing sinon chai


    【解决方案1】:

    如果你想全局替换一个模块,你需要使用一个link seam,它基本上注入一个不同的模块(例如一个Sinon spy)而不是真正的一。你可以看到a whole how-to in the Sinon documentation

    你的情况是这样的

    const proxyquire = require('proxyquire');
    const sinon = require('sinon');
    const chai = require('chai');
    const expect = chai.expect;
    
    // replace the dependency with a stub
    const multiplicationFake = sinon.fake.returns(42);
    const mylib = proxyquire('./mylib', { './multiplication': multiplicationFake });
    
    describe('My Test', function() {
    
       it('Faking Globally',function() {
         const result = mylib(2,3);
         expect(multiplicationFake.calledOnce).to.equal(true);
         expect(result).to.deep.equal(42);
       })   
    })
    

    我在这里使用了诗乃的假货,但如果你喜欢的话,你可以使用间谍或存根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 2011-02-02
      • 1970-01-01
      • 2020-08-26
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多