与摩卡手表一起使用时,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
函数调用dispatch
的actions.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
解决了这个问题。