首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在执行fetch.mockResponse之后使用Jest,实际的提取也会被调用

即使在执行fetch.mockResponse之后使用Jest,实际的提取也会被调用
EN

Stack Overflow用户
提问于 2019-06-10 03:52:35
回答 1查看 5.3K关注 0票数 3

我是第一个用Jest编写第一个测试用例的新手。我得模拟一个回音。我用的是取笑-取笑-模仿。但是,调用将转到实际的fetch,并且返回的数据未定义。

package.json:

“嘲笑-获取-模拟”:"^2.1.2“

setupTest.js文件

代码语言:javascript
复制
global.fetch = require('jest-fetch-mock');

实际api调用方法:

代码语言:javascript
复制
static fetchUserInfo(){
    return dispatch => {
        fetch('https://localhost:55001/api/userInfo')
            .then(this.httpResponseHandler.handleHttpResponse)
            .then ((resp) => resp.json())
            .then(data => dispatch(this.onUserInfoGetSuccess(data)))
            .catch( error => {
                dispatch(this.onFetchFailure(error));
            });
    };
}

测试用例

代码语言:javascript
复制
it('should get user info', () => {
    fetch.mockResponse(JSON.stringify({
            "name": "swati joshi",
        }
    ));

    let data = ActualDataApi.fetchUserInfo();
    console.log(data);
    expect(data.name).toEqual('swati joshi');
}

既然fetchUserInfo是dispatcher (使用React),那么如何模拟它呢?提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-06-11 17:07:08

有可能fetch没有被模仿,correctly...but看起来最主要的问题是fetchUserInfo返回一个函数。

应该在dispatch模拟上调用它返回的函数,以验证它是否分派了正确的操作。

还请注意,fetchUserInfo返回的函数是异步的,因此您需要一种方法来等待它在测试期间完成。

如果您修改fetchUserInfo返回的函数以返回Promise,如下所示:

代码语言:javascript
复制
static fetchUserInfo(){
  return dispatch => {
    return fetch('https://localhost:55001/api/userInfo')  // <= return the Promise
      .then(this.httpResponseHandler.handleHttpResponse)
      .then((resp) => resp.json())
      .then(data => dispatch(this.onUserInfoGetSuccess(data)))
      .catch(error => {
        dispatch(this.onFetchFailure(error));
      });
  };
}

...then您可以这样测试它:

代码语言:javascript
复制
it('should get user info', async () => {  // <= async test function
  fetch.mockResponse(JSON.stringify({
    "name": "swati joshi",
  }));

  let func = ActualDataApi.fetchUserInfo();  // <= get the function returned by fetchUserInfo
  const dispatch = jest.fn();
  await func(dispatch);  // <= await the Promise returned by the function
  expect(dispatch).toHaveBeenCalledWith(/* ...the expected action... */);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56520314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档