如何在使用 Jest 进行单元测试时对函数内的 promise 进行代码覆盖

在使用 jest 进行单元测试时,如何编写代码覆盖然后捕获函数内的 Promise 函数?请看下面的代码。


服务.js


export const userLogin = data => {

  return AjaxService.post(

    "http://localhost/3000/signin", data

  ).then(

    res => {

      return res.data;

    },

    error => {

      return error.response.data;

    }

  );

};

AjaxService.js


export const AjaxService = {

  post: (url, data, headers) => {

    return axios({

      method: "POST",

      url: url,

      headers: headers || { "content-type": "application/json" },

      data: data

    });

  }

}


示例.js


class Login extends Component {


  handleSubmit = (event) => {

    if (this.props.handleSubmit) this.props.handleSubmit(); 

    this.setState({isLoggedIn: true})

    userLogin().then((res) => {

     // when promise resolve

     var response = res;

    }, (err) => {

      // when promise reject  

      var error = err;

    })

  }

  render() {

   return (

    <form id="login-form" onSubmit={(e) => this.handleSubmit(e)} >

     <input type="username" />

     <input type="password" />

     <button type="submit">Login</button>

    </form>

   )

  }


}

示例.test.js


it("test login form submit ", () => {

    wrapper = shallow(<Login />);

    let instance = wrapper.instance(); // get class instance

    instance.handleSubmit(); // will trigger component method

    let actualVal = wrapper.state().isLoggedIn; // get state key value

    expect(true).to.eql(actualVal);

  });

--coverage在 Jest 中使用生成覆盖率报告后

http://img3.mukewang.com/617bae0000016bc004270176.jpg

我们可以看到 promise 成功和错误函数中的代码没有作为单元测试的一部分被覆盖。所以请帮忙介绍一下。谢谢。


慕田峪7331174
浏览 247回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript