How to mock api in jest and enzym

喜夏-厌秋 提交于 2019-12-13 04:14:24

问题


This is the method which I use for making fetch calls to my api:

static sendJsonRequest(address, action, requestType, jsonData, queryParams, successCallback, errorCallback){

    var finalURL = Client.getServiceURL( address, action, queryParams);

    fetch(finalURL, {
      method: requestType,
      headers: {
        'content-type': 'application/json; charset=utf-8',
        'Authorization': 'Bearer ' + localStorage.getItem("access_token"),
        'pragma': 'no-cache',
        'cache-control': 'no-cache'
      },
      body: String(requestType).toLowerCase() === "get" ? undefined : JSON.stringify(jsonData)
    })
    .then(function(response) {
      if (!response.ok) {
          throw Error(response.statusText);
      }
      return response.json();
    })
    .then(function(jsonObj) {
      successCallback(jsonObj);
    })
    .catch(function(err) {
        errorCallback(err);
    });
}

And this is how I use this static method in my components:

        componentDidMount(){
            this.getPermissions();
        }

        getPermissions(){
            this.setState({
              Permissions_DATA: []
            });
            var permissionData = {userName: "xyz", resourceId : localStorage.getItem("target_resource_id")};
            Client.sendJsonRequest("authData", "getPermData", "POST", permissionData, "", this.handleGetPermissions, this.handleError);
          }

          handleGetPermissions(response){
            ---
          }

          handleError(e) {
             ---
          }

As as beginner I want to write test case for mocking this fetch call, but I don't know how to write the test cases for the same, can any one please help me out with this.

I tried googling out this as well, but not able to figured out anything. Thanks in advance


回答1:


There is a library called Fetch Mock that will allow you to mock an API response for use in your tests.

An example of a test covering the behaviour of Client.sendJsonRequest might look something like:

test('Client.sendJsonRequest - calls API endpoint', (done) => {

    fetchMock.post('/the-url-to-test', { a mock response object... });
    Client.sendJsonRequest('/api/address', 'update', 'POST');
    expect(fetchMock.calls('/the-url-to-test').length).toBe(1);
});

The specific tests you will write depend on what you want to test, but the FetchMock documentation should help with that.

You'll be able to do things like check the success and error callbacks are fired, but using spies and stubs too.




回答2:


You can mock the whole function and tell it what exactly it should return.

jest.mock('../pathtoSendJsonRequest');

You have the possibility to mock async methods as well



来源:https://stackoverflow.com/questions/50621873/how-to-mock-api-in-jest-and-enzym

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!