监视导入功能

时间:2018-09-24 11:14:55

标签: node.js unit-testing mocking sinon

我想监视需要该文件后立即执行的功能。在下面的示例中,我想监视一下吧。我有以下文件。

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

}

存根无效。我认为这是一个时机问题。 Bar在执行后被存根。如果我将第一行包装在函数中并在测试中执行该函数,则上面的示例有效。但这不是我想要的。有人对如何使用此类方法有想法吗?

2 个答案:

答案 0 :(得分: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)
  })
}

参考:

希望有帮助

答案 1 :(得分:0)

我认为您的问题是您永远不会在执行const foo = bar()的位置导入文件。您只是在导入酒吧,仅此而已!尝试在it块中导入文件或要求文件!那应该触发bar(),所以测试应该通过!<​​/ p>

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

再见!