使用Jest进行单元测试,预期会收到空/未定义的对象的问题

时间:2019-03-05 16:34:04

标签: reactjs unit-testing testing jestjs sinon

我是单元测试的新手,我正在尝试测试导航栏的长度,下面您可以看到类中的导航栏组件

<AppBar className={classes.appBar} position="static">
        <Toolbar className={classes.toolbar}>
            {authenticated && this.state.layoutMode ==='desktop' ? (
                <Grid container
                    direction ="row"
                    justify="flex-end"
                    alignItems="center">
                    <div className={classes.root}>
                        <Tabs id="Tab" className = {classes.tabBar} value={value} onChange={this.handleChange}>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                            <Tab label="example" alt="example" onClick={() => Router.push('/example')}/>
                        </Tabs>
                    </div>
                </Grid>
            ) : (
                authenticated && <BurgerMenu/>
            )}

下面是我到目前为止编写的测试

describe('NavBar', () => {
const intialState = {
    ui: { width: 1361 },
    auth: { authenticated: true }
}

let container;
beforeEach(() => {
    container = shallow(<Nav />);
});

it('should render self and subcomponents', () => {
    expect(container).toMatchSnapshot();
});

it('should contain an AppBar', () => {
    console.log(container.find(AppBar));
    expect(container.find(AppBar)).toHaveLength(1);
});

})

但是我的问题是似乎没有找到.find(AppBar),使用控制台日志(container.find(AppBar))时,它显示以下“ ShallowWrapper {}”,这意味着该对象为空因此不等于1,但是我不知道将查找指向何处以正确找到要测试的标签

1 个答案:

答案 0 :(得分:0)

解决方案是

let container;
beforeEach(() => {
    container = mount(<Nav />);
});

深入浅入DOM。