функция зависимости sinon фальсификация - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу подделать или заглушить функцию, которая не используется в качестве метода объекта. См. 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);
   })

})

1 Ответ

0 голосов
/ 08 февраля 2019

Если вы хотите глобально заменить модуль, вам нужно использовать звено связи , которое в основном вводит другой модуль (например, шпион 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, но выможете использовать шпионов или окурков, если вы предпочитаете их.

...