0

我有一个在 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

感谢您的时间。

4

1 回答 1

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();

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

于 2021-05-14T10:26:30.080 回答