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

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

}

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

0
Trafalgar 24 Сен 2018 в 14:14

2 ответа

Лучший ответ

В этом случае мы можем использовать 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 :

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

2
deerawan 28 Сен 2018 в 12:55

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

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

До свидания!

0
Maxi Bisurgi 25 Сен 2018 в 06:08