Sinon Stub: функции, вызываемые из другой функции [duplicate]

Вы можете использовать слияние Lodash :

var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};

var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }

4
задан Steven Musumeche 4 October 2016 в 21:01
поделиться

2 ответа

Некоторая реструктуризация может сделать эту работу.

Я использовал синтаксис commonJS. Также должен работать аналогично в ES6.

foo.js

const factory = {
  a,
  b,
}
function a() {
  return 2;
}

function b() {
  return factory.a();
}

module.exports = factory;

test.js

const ser = require('./foo');
const sinon = require('sinon');

const aStub = sinon.stub(ser, 'a').returns('mocked return');
console.log(ser.b());
console.log(aStub.callCount);

Выход

< blockquote>

mocked return

1

3
ответ дан anoop 15 August 2018 в 23:31
поделиться

Несмотря на то, что вышеописанное работает, это, безусловно, обходной путь, так как мой линтер быстро сообщил.

Я закончил разделение модулей и использовал proxyquire . Эта библиотека позволяет вам легко подставлять любой / любой экспорт в зависимости от ваших предпочтений, шпионов sinon или шпионажа. например :

в b.js

export const fnB = () => 'hey there!';

в a.js

import { fbB } from 'b.js';
export const fnA = () => fbB();

в a.test.js

import { noCallThru } from 'proxyquire';
const proxyquireStrict = noCallThru();
const stubB = stub().returns('forced result');
const moduleA = proxyquireStrict('a.js', {
    'b.js' : { fnB: stubB }
}).fnA; 

console.log(fnA()); // 'forced result'
1
ответ дан benipsen 15 August 2018 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: