与摩卡手表一起使用时,Sinon存根有奇怪的performance

所以这里是我们的基本设置

src/MyComponent.js

 import actions from `src/actions` export const mapDispatchToProps = dispatch => { return { onClick: () => { dispatch(actions.myAction()) } } } 

src/actions.js

 const actions = { myAction: () => () => ... } export default actions 

src/MyComponentTest.js

  import sinon from 'sinon' import actions from 'src/actions' import { mapDispatchToProps } from 'src/MyComponent' describe('onClickTests, () => { let dispatch = sinon.spy() let onClick beforeEach(() => { onClick = mapDispatchToProps(dispatch).onClick }) it('calls dispatch with myAction', () => { function f () {} sinon.stub(actions, 'myAction').returns(f) onClick() expect(dispatch.args[0]).to.deep.equal([f]) }) }) 

基本上,我们正在检查onClick函数调用dispatchactions.myAction的返回值。 由于真正的actions.myAction返回一个匿名函数,我们将它存起来以返回函数f 。 当我们与摩卡一起运行这一切的工作,直到我们运行 – --watch 。 第一次运行仍然按预期通过,但是当我们保存一个testing并重新运行testing时,这个testing失败

 expected [ [Function: f] ] to deeply equal [ [Function: f] ] 

如果我对这个testing做了这些修改

  it('calls dispatch with myAction', () => { function f () {} sinon.stub(actions, 'myAction').returns(2) onClick() expect(dispatch.args[0]).to.deep.equal([2]) }) 

我明白了

 expected [ [Function: f] ] to deeply equal [ [2] ] 

所以我从中得到的结果是,第二次运行时, actions.minimize返回的是从第一次运行开始的“老”。 我们已经尝试了各种各样的不同的变化就像使用module.exports/require而不是export/import和移动的东西到Mocha钩( beforeEach等),似乎没有任何工作,这导致我相信这是我们正在testing的一个更基本的问题。 有什么build议么?

我之前遇到过这个问题,花了一段时间才弄明白。

不知道这是否是你的情况,但我使用.jsx扩展名为我的组件,事实certificate这带来了各种随机问题。

Component.jsx重命名为Component.js解决了这个问题。