小编Raj*_*y P的帖子

酶反应setTimeout相关测试导致错误

我想测试一个方法是否在使用酶和sinon-mocha的React组件中的一定时间间隔后被调用.

反应组件

var TestComp = React.createClass({
    myFunc: function() {
        console.log('I am called');
    }
    componentDidMount: function() {
        this.timer = window.setTimeout(myFunc, 2000);
    }
    componentWillUnmount: function() {
        clearTimeout(this.timer);
    }
})
Run Code Online (Sandbox Code Playgroud)

单元测试

var clock;

before(function () {
    clock = sinon.useFakeTimers();
});

after(function () {
    clock.restore();
});

it('myFunc is called once', function() {
    spy(TestComp.prototype, 'myFunc');

    var wrapper = mount(<TestComp/>);

    clock.tick(3000);

    expect(TestComp.prototype.myFunc.calledOnce).to.equal(true);
});
Run Code Online (Sandbox Code Playgroud)

错误

它会抛出断言错误.测试在定时事件中崩溃,我在包装器节点上使用一些控制台日志识别出来.它表示堆栈跟踪错误.但是,测试用例会触发myFunc,这从控制台日志中可以看出.

我该如何捕捉myFunc电话?有谁知道它为什么会发生?

控制台错误与此https://github.com/sinonjs/sinon/issues/87#issuecomment-8547823相同

更新

堆栈跟踪:

'Error: Stack Trace for original
at Object.wrapMethod
at spy
at Context.<anonymous> …
Run Code Online (Sandbox Code Playgroud)

javascript sinon reactjs enzyme

6
推荐指数
0
解决办法
1091
查看次数

标签 统计

enzyme ×1

javascript ×1

reactjs ×1

sinon ×1