React 및 material UI를 사용하여 구성 요소를 구축했습니다. 나는 React와 Redux를 사용하고있다.TextField 재질 UI 요소를 테스트하는 방법 React Jest?
내 index.jsx은 다음과 같습니다 InputSearch은 다음과 같습니다
import React from 'react';
import { render } from 'react-dom';
import { Provider } from 'react-redux';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import configureStore from '../store/configureStore';
import Routes from '../routes/routes';
import '../styles/main.less';
const store = configureStore();
render(
<Provider store={store}>
<MuiThemeProvider>
<Routes />
</MuiThemeProvider>
</Provider>,
document.getElementById('app'),
);
내 구성 요소 : I는 단위 테스트를 구축하는 에어 비앤비 효소와 농담을 사용하고
import React, { PropTypes, Component } from 'react';
import TextField from 'material-ui/TextField';
class InputSearch extends Component {
...
render() {
return (
...
<TextField
defaultValue={this.props.keyword}
ref={(input) => { this.input = input; }}
autoFocus
hintText='Type a keyword'
errorText={this.state.errorText}
floatingLabelText='Search for keyword'
style={styles.textField}
/>
);
}
}
InputSearch.propTypes = {
keyword: PropTypes.string.isRequired,
resetSearch: PropTypes.func.isRequired,
searchBooks: PropTypes.func.isRequired,
toggleResultsOpacity: PropTypes.func.isRequired,
firstSearch: PropTypes.bool.isRequired,
};
export default InputSearch;
. InputSearch 구성 요소에 내 테스트는 다음과 같습니다
import React from 'react';
import { shallow, mount } from 'enzyme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import TextField from 'material-ui/TextField';
import InputSearch from '../components/InputSearch/InputSearch';
const resetSearchMock = jest.fn();
const searchBooksMock = jest.fn();
const toggleResultsOpacityMock = jest.fn();
const setup =() => {
const props = {
keyword: '',
resetSearch: resetSearchMock,
searchBooks: searchBooksMock,
toggleResultsOpacity: toggleResultsOpacityMock,
firstSearch: true,
};
const wrapper = shallow(<MuiThemeProvider><InputSearch {...props} /></MuiThemeProvider>);
return {
props,
wrapper,
};
};
describe('Initial test',() => {
test('Shows error message when input search is empty.',() => {
const { wrapper, props } = setup();
expect(wrapper.find(TextField).getValue()).toEqual('');
});
}
을 그러나, 나는 다음과 같은 오류를 받고 있어요 :
TypeError: wrapper.find(...).getValue is not a function
사람이 나를을 확인하는 올바른 방법으로 달성 할 수 있도록 할 수 있습니다 소재의 값은 TextField입니까?
안녕하세요 @ Farhaan Bukhsh, 좋은 팁 "디버그"기능입니다. 그러나 내 TextField 구성 요소에는 "value"속성이 없으며 "defaultValue"속성 만 있습니다. 새 값을 전달하는 "변경"이벤트를 어떻게 시뮬레이트하고 테스트 할 수 있습니까? –
이봐, 당신이 가지고있는''prop''이라면''value''를''defaultValue''로 대체 할 수 있습니다. 또한''material-ui ''를 업데이트 할 것을 제안합니다. 이제는 "변화"이벤트를 "시뮬레이션"하는 것이 매우 간단합니다. '대상 : { 값 : "Farhaan" }})'',''Farhaan''을 넣을 것입니다. ''TextField''에서 값을 쉽게 확인할 수 있습니다. –