如何使用Sinon监视导入的函数?

时间:2017-07-14 19:55:28

标签: javascript mocha sinon chai es6-modules

让我们说我们想测试另一个使用Sinon的函数调用特定函数。

fancyModule.js

export const fancyFunc = () => {
  console.log('fancyFunc')
}

export default const fancyDefault = () => {
  console.log('fancyDefault')
  fancyFunc()
}

fancyModule.test.js

import sinon from 'sinon'
import fancyDefault, { fancyFunc } from '../fancyModule'

describe('fancyModule', () => {
  it('calls fancyFunc', () => {
    const spy = sinon.spy(fancyFunc)
    fancyDefault()
    expect(spy.called).to.be.true
  })
})

当我运行此测试时,实际值始终为 false 。此外,原始函数fancyFunc()被调用(输出 fancyFunc )而不是被模拟。

1 个答案:

答案 0 :(得分:1)

您可以更改导入样式,并将模块导入为像这样的对象

import sinon from 'sinon'
import * as myModule from '../fancyModule'

describe('fancyModule', () => {
  it('calls fancyFunc', () => {
    const spy = sinon.spy(myModule, 'fancyFunc');
    myModule.fancyDefault()
    expect(spy.called).to.be.true
  })
})