如何用开玩笑和酶法模拟api

时间:2018-05-31 10:13:55

标签: reactjs jestjs enzyme

这是我用来对我的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);
    });
}

这就是我在我的组件中使用这个静态方法的方法:

        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) {
             ---
          }

和初学者一样,我想编写测试用例来模拟这个获取调用,但我不知道如何编写相同的测试用例,任何人都可以帮我解决这个问题。

我也尝试使用Google搜索,但无法弄清楚任何事情。提前致谢

2 个答案:

答案 0 :(得分:0)

有一个名为Fetch Mock的库,允许您模拟API响应,以便在测试中使用。

涵盖Client.sendJsonRequest行为的测试示例可能类似于:

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

您要编写的具体测试取决于您要测试的内容,但FetchMock文档应该有帮助。

您可以执行检查成功和错误回调的操作,但也可以使用间谍和存根。

答案 1 :(得分:0)

你可以模拟整个函数并告诉它究竟应该返回什么。

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

您可以mock async methods as well