Jest 中的回调响应与正常响应不同

时间:2021-05-14 07:59:01

标签: react-native jestjs jest-fetch-mock

我有一个在 React Native 中调用端点的方法,我想用玩笑测试它。一切都是异步的,它可以工作,但是在测试端调用函数时的回调响应与在应用程序中正常调用函数时的响应完全不同。

通常,我的响应将是这样的 JSON:

"_bodyBlob":{
      "_data":{
         "__collector":[
            "Object"
         ],
         "blobId":"43564E12-D797-4971-80C7-A6E06D690F8A",
         "name":"login",
         "offset":0,
         "size":784,
         "type":"application/json"
      }
   },
   "_bodyInit":{
      "_data":{
         "__collector":[
            "Object"
         ],
         "blobId":"43564E12-D797-4971-80C7-A6E06D690F8A",
         "name":"login",
         "offset":0,
         "size":784,
         "type":"application/json"
      }
   },
   "bodyUsed":false,
   "headers":{
      "map":{
         //a lot of private data here and others
      }
   },
   "ok":true,
   "status":200,
   "statusText":"",
   "type":"default",
   "url":"private url"
}

但是Jest调用方法返回的响应是这样的:

Response {
      size: 0,
      timeout: 0,
      [Symbol(Body internals)]: { body: <Buffer >, disturbed: false, error: null },
      [Symbol(Response internals)]: {
        url: undefined,
        status: 200,
        statusText: 'OK',
        headers: Headers { [Symbol(map)]: [Object: null prototype] },
        counter: undefined
      }
    }

Which is not even a JSON.

当 Jest 调用该方法时,这是回调的 normal response 还是我调用该函数时可能出错,因为它都是 asynchronous

感谢您抽出宝贵时间。

1 个答案:

答案 0 :(得分:0)

在您的 Jest 测试中,响应似乎是 javascript Response 对象:https://developer.mozilla.org/en-US/docs/Web/API/Response

为了从中获取 JSON,您需要应用其 json() 方法,如本例所示:https://developer.mozilla.org/en-US/docs/Web/API/Response#an_ajax_call

因此,一旦您获得响应对象,请执行以下操作:

const jsonValue = await response.json();

jest 和实际应用程序中的值不同的原因可能是在您的实际应用程序中,处理响应的库可能会在向您传递响应之前调用 json 对象。 >

相关问题