【发布时间】:2017-11-02 14:10:37
【问题描述】:
我需要测试的是LoginWrapper 总是在Login 组件中呈现。我按如下方式测试它,但由于找不到LoginWrapper,它没有通过。
import React from 'react';
import Login from '../components/Login';
import Wrapper from '../components/Wrapper';
import styled from 'styled-components';
describe('test login', () => {
const shallowRender = (props) => shallow(<Login {...props} />);
let LoginWrapper;
beforeEach(() => {
LoginWrapper = styled(Wrapper)``;
});
afterEach(() => {
});
it('always render LoginWrapper', () => {
const login = shallowRender({
onSubmit: () => {}
});
const divs = login.find(LoginWrapper);
expect(divs).toHaveLength(1);
});
});
登录.js
import React from 'react';
import Wrapper from './Wrapper';
import { H5, Text, ALink } from '@lendi/lendi-components';
import styled from 'styled-components';
const LoginWrapper = styled(Wrapper)`
.mobile {
margin-bottom: 2px;
}
.signup {
padding-left: 5px;
}
`;
function Login ({onSubmit}) {
return (
<LoginWrapper>
<H5 style={style.center}>
{txt.title}
</H5>
</LoginWrapper>
);
}
export default Login;
看起来LoginWrapper 将呈现为<Styled(styled.div)> 那么找到它的正确方法是什么?
我们将不胜感激。
【问题讨论】:
-
它实际上被渲染为
Styled(Wrapper)。将displayName用于LoginWrapper作为选择器怎么样。login.find(LoginWrapper.displayName);周围的东西 -
您需要在测试中导入
LoginWrapper组件。import LoginWrapper from '../components/LoginWrapper';这是第一步,从那里开始。 -
@OluwafemiSule 感谢您的 cmets。但是
login.find()在传入不存在的样式组件时总是返回一些我无法正确测试的东西。有什么想法吗? -
我有同样的问题和疑问。即使您执行以下操作:
wrapper = shallow(<Login />); expect(wrapper.find(LoginWrapper)).to.contain.text('Some Text');您也会收到如下错误:expected the node in <LoginWrapper/> to contain text 'Some text', but it has '<styled.div />' -
@worker11811 嘿,伙计。请参阅下面的链接github.com/styled-components/styled-components/issues/877
标签: unit-testing reactjs jestjs enzyme