2017-01-23 27 views
0

即使我使用afterEach,我仍然得到以下错误:试图包装已经包裹的setTimeout.What我做错了吗?我正在使用ava来做这个单元测试。我试图创建的测试非常简单。它几乎检查渲染和点击操作。还有一个测试来检查setTimeOut函数是否被调用了正确的参数。使用Ava进行React单元测试:为什么函数已经打包?

import test from 'ava'; 
import React from 'react'; 
import { CartMessage } from 'components/Cart/CartMessage'; 
import { shallow, mount } from 'enzyme'; 
import { spy, stub } from 'sinon'; 

let props; 
let popError; 
let cartmessage; 
let timeoutSpy; 


test.beforeEach(() => { 
    props = { 
    message: 'testing', 
    count: 2, 
    popError: stub().returns(Promise.resolve()), 
    }; 
    cartmessage = shallow(<CartMessage {...props}/>) 

    timeoutSpy = spy(window, 'setTimeout'); 
}); 

test.afterEach(()=>{ 
    timeoutSpy.restore() 
}) 

test('renders okay?', (t) => { 
    t.truthy(Cartmessage) 
}); 

test('componentDidMount calls setTimeout with proper args', t => { 
    t.true(timeoutSpy.calledWithExactly(() => this.setState({ MessageOpen: true }), 1)) 
}) 

test('onClose called?', t => { 
    const wrapper = shallow(<CartMessage {...props} />); 
    wrapper.find('i').simulate('click'); 
    t.true(timeoutSpy.calledWithExactly(this.props.popError, 1)) 
}) 

test('timeout i called with the right args', (t) => { 
    t.true(timeoutSpy.calledWithExactly(this.props.popError, 1)); 
}) 

回答

2

AVA并行运行检验,故beforeEachafterEach运行之前运行每个测试的。

使此测试工作最快的方法是在此文件中仅使用test.serial()。这样所有的测试都是连续执行的,afterEach有机会在下一个beforeEach运行之前清理。

相关问题