Javascript sinon依赖函数伪造

Javascript sinon依赖函数伪造,javascript,unit-testing,sinon,chai,Javascript,Unit Testing,Sinon,Chai,我想伪造或存根一个没有用作对象方法的函数 //multipliation.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 =

我想伪造或存根一个没有用作对象方法的函数

//multipliation.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);
   })

})


如果你想全局替换一个模块,你需要使用一个链接接缝,它基本上注入了一个不同的模块(例如Sinon spy),而不是真正的模块。你可以看到

就你的情况来说

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);
   })   
})

我在这里使用了Sinon赝品,但如果您愿意,可以使用间谍或存根。

如果您想全局替换模块,您需要使用链接接缝,它基本上注入了不同的模块(例如Sinon间谍),而不是真实的模块。你可以看到

就你的情况来说

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);
   })   
})
我在这里用的是Sinon赝品,但如果你喜欢,你可以用间谍或存根