бланк тестового бланка с onSubmit в качестве реквизита - PullRequest
0 голосов
/ 22 июня 2019

Допустим, у вас есть следующие данные.

commentData = {
  id: 2,
  comment_body:'test example'
}

И у вас есть компонент формы, который принимает onSubmit проп.

Пример формы / комментария

import React  from "react";
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
const Comment = (props) => (
    <div>     
        <form onSubmit={props.onSubmit}>
             <TextField
                type="text"
                id="outlined-multiline-static"
                label="Write A Comment"
                multiline
                name="comment_body"
                value={props.commentBody}
                rows="10"
                fullWidth
                margin="normal"
                variant="outlined"
                onChange={props.commentChange}
            />
            {/* <Button type="submit" variant="outlined" component="span" color="primary">
                Post A Comment
            </Button> */}
             <button type="submit" variant="outlined" component="span" color="primary">
                Write a Comment
            </button>
        </form>
    </div>
)

export default Comment;

Компонент комментария затем используется в родительском компоненте, подобном этому

.....
class ImageContainer extends React.Component{
    state = {
      isComment: false,
      comment_body: ""
    }
    handleCommentChange = (e) => {
        this.setState({
           comment_body: e.target.value
        })             
    }
    writeComment = (id)  => {
        this.setState({
            isComment: this.state.isComment ? '' : id // check if you state is filled to toggle on/off comment
        })   
    }
    commentSubmit = (event, id) => {
        event.preventDefault();
        console.log(this.state.comment_body); // doesn't get console.log
        // note that commentBody is being used for the req.body as well so its called by req.body.commentBody
        const commentBody = this.state.comment_body
        const data = {   
            commentBody,
            id
        }   
        this.props.postComment(data);
        this.setState({
            comment_body: ''
        })

    }
    render(){
       const { img, deleteImg, classes } = this.props
       return(
           <Grid item sm={12} md={12} className={classes.imageGridItem}>
             ......
               <Comment onSubmit={(e) => this.commentSubmit(e, img.id)} 
                            commentBody={this.state.comment_body } 
                            commentChange={this.handleCommentChange}/> 

            ......

            </Paper>                              
        </Grid>        
      )
   }
}

 const mapDispatchToProps = (dispatch) => ({
    postComment: (data) => dispatch(postComment(data))
 })
 export default compose(connect(mapStateToProps, mapDispatchToProps), withStyles(imageStyles))(ImageContainer)

, данные передаются в действии избыточности, подобном этому

action

// post comment

export const postComment = data => {
    return async (dispatch) => {
        return Axios.post('/images/newComment', data).then( (response )=> {
            const newComment = response.data;
            const id = data.id
            // console.log(newComment);


            dispatch({type:POST_COMMENT, newComment, id })


        })
    }
}

Как мне провести модульное тестирование?Я знаю, что мне нужно разделить модульный тест как модуль для действия и модульный тест для компонента <Comment/>.

Это моя попытка модульного тестирования компонента комментария проповеди onSubmit, я делаюэто верно?

В настоящее время тест проходит, но я не уверен, что это правильный способ для модульного теста onSubmit prop.

Comment.test.js

.....
describe('Should render <Comment/> component', () => {
    let wrapper;
    beforeEach( () => {
        wrapper = shallow(<Comment/>)
    })
    ......
    it("should check for onChange method (1)", () => {
        const onChangeMock = jest.fn();
        const component = shallow(
          <Comment commentChange={onChangeMock} commentBody={"test"} />
        );
        component.find(TextField).at(0).simulate("change", "test");
        expect(onChangeMock).toBeCalledWith("test");
      });
      it('should test onSubmit', () => {
        const mockSubmit = jest.fn();
        const component = shallow(
            <Comment commentBody={'owl'} onSubmit={mockSubmit}/>
        );
        const props = {
            id:2,
            comment_body:'test'
        }
        component.find('form').simulate('submit', props);
        expect(mockSubmit).toBeCalledWith({ 'comment_body': "test", "id": 2});
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...