Шпионить за импортированной функцией - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу следить за функцией, которая выполняется, как только требуется файл.В приведенном ниже примере я хочу шпионить за баром.У меня есть следующие файлы.

code.ts

import {bar} from 'third-party-lib';
const foo = bar()

test.ts

import * as thirdParty from 'third-party-lib';

describe('test', () => {

  let barStub: SinonStub;      

  beforeEach(() => {
     barStub = sinon.stub(thridParty, 'bar')
  })

  it('should work', () => {
    assert.isTrue(bar.calledOnce)
  })

}

Заглушка не работает.Я думаю, что это проблема времени.Бар заглушен после того, как он был выполнен.Приведенный выше пример работает, если я обертываю первую строку в функции и выполняю эту функцию в своем тесте.Но это не то, что я хочу.У кого-нибудь есть идея, как заглушить такие методы?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

В этом случае мы можем использовать proxyquire , чтобы заглушить эту стороннюю библиотеку, как показано ниже:

import * as thirdParty from 'third-party-lib';
const proxyquire = require('proxyquire');

const barStub: SinonStub = sinon.stub();
proxyquire('./your-source-file', {
  'third-party-lib': { bar: barStub } 
});

describe('test', () => {
  it('should work', () => {    
    assert.isTrue(barStub.calledOnce)
  })
}

Ref:

Надеюсь, это поможет

0 голосов
/ 25 сентября 2018

Я думаю, что ваша проблема в том, что вы никогда не импортируете файл, в котором выполняете const foo = bar ().Вы просто импортируете бар, вот и все!Попробуйте импортировать или запросить файл внутри блока it!Это должно сработать bar () и так, тест должен пройти!

it('should work', () => {
const foo = require(‘your_foo_file’)
assert.isTrue(bar.calledOnce)
})

Пока!

...