在ComponentDidMount()中对Axios请求进行Jest /酶单元测试 [英] Jest/Enzyme Unit Test on Axios Requests in ComponentDidMount()

查看:87
本文介绍了在ComponentDidMount()中对Axios请求进行Jest /酶单元测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Jest和Enzyme在我现有的react应用程序上执行一些单元测试。我对这些东西完全陌生,准确地说,我不知道该如何处理这样的测试场景。我知道要测试API请求调用,我必须执行一些模拟,但是我应该如何为此编写测试?将需要遵循哪些步骤?

I am trying to perform some unit testing on my existing react application with Jest and Enzyme. I am totally new to this stuff and accurately I do not know how to approach such test scenarios. I know that to test API request calls I have to perform some "mocking", but how should I write the test for that?. What will be the steps that needs to be followed?

以下是我要测试的代码段。

Following is the code snippet I am looking to test.

Home.js

import React,{Component} from 'react'
import axios from 'axios';
import {Link} from 'react-router-dom';
import FacilityModal from '../Table/FacilityModal';

class Home extends Component {
  state = {
    cities:[],
    name:''
  }
 
  componentDidMount() {
    axios.get('/cities').then(res => {
      this.setState({cities:res.data})
      console.log("Oza" + JSON.stringify(res))
    });
    console.log(this.state.cities)
  }
 
  render() {
    let postList = this.state.cities.map(city => {
      return(
        <div key = {city.id}>
          <p>
            <Link to = {'/'+city.id}>{city.name}</Link>
          </p>
        </div>
      )
    })
    return(
      <div className = 'align'>All Facilities (NCAL)
        <div className="hr-sect">OR</div>
        <div className = 'Modal'>
          {postList}
        </div>
        <FacilityModal cityname = {this.props} />
      </div>
    )
  }
}


推荐答案

import React from 'react';
import axios from 'axios';

export default class ArticleList extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      articles: []
    }
  }

  componentDidMount() {
    return axios.get('GET_ARTICLES_URL').then(response => {
      this.setState({
        articles: response.data
      });
    });
  }

  render() {
    return (
      <ul>
        {this.state.articles.map(a => <li><a href={a.url}>{a.title}</a></li>)}
      </ul>
    )
  }
}

// ---------

import React from 'react';
import { shallow } from 'enzyme';
import App from './App';

jest.mock('axios', () => {
  const exampleArticles = [
    { title: 'test article', url: 'test url' }
  ];
  
  return {
    get: jest.fn(() => Promise.resolve(exampleArticles)),
  };
});

const axios = require('axios');

it('fetch articles on #componentDidMount', () => {
  const app = shallow(<App />);
  app
    .instance()
    .componentDidMount()
    .then(() => {
      expect(axios.get).toHaveBeenCalled();
      expect(axios.get).toHaveBeenCalledWith('articles_url');
      expect(app.state()).toHaveProperty('articles', [
        { title: 'test article', url: 'test url' }
      ]);
      done();
    });
});

检查此文章 https://binarapps.com/blog/test-ajax-calls-in-react-component-lifecycle/

这篇关于在ComponentDidMount()中对Axios请求进行Jest /酶单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆