Свойство интерфейса "Jest" с типом never - имитируйте и тестируйте сообщение - PullRequest
0 голосов
/ 05 августа 2020

У нас есть интерфейс из nodemodules

declare namespace CbServer {     
    interface Resp {
        error(msg: any): never;
        success(msg: any): never;
    }
}

In dh. js

 const getDataFromRequest = (req, resp) => {
 
 if (req) {
    var data = {
      dName: req.params.body.d_id,
      requestData: req.params.body,
      dColName: `SD-${req.params.body.d_id}`
    }
    return data;
  }
  return resp.error('failed');
}
module.exports = getDataFromRequest;

Написание тестового примера для вышеуказанного метода с использованием Jest

In dh.test.ts

    const getDataFromRequest = require("./dh");
import { MockProxy, mock } from 'jest-mock-extended';

describe('test cases', () => {

  var inputReq = {
    params: {
      body: {
        "d_id": "733439150857912479",
        "last_access": "today",
        "user": "TestUser"
      }
    }
  }
  
  var getDataResult = {
    dName: "drw_733439150857912479",
    requestData: { "d_id": "733439150857912479", "last_access": "today", "user": "TestUser" },
    dColName: "SD-733439150857912479"
  }

  let mockResp: MockProxy<CbServer.Resp>;
  beforeEach(() => {
    mockResp = mock<CbServer.Resp>();
  });
  
  test('request with valid parameter', () => {    
      
    var resultData = getDataFromRequest(inputReq, mockResp);    
    expect(resultData).toEqual(getDataResult);
    expect(mockResp.error).toBeCalledTimes(0);
   
  });

  test('density hook request with invalid parameter', () => {    
          
    var resultData = getDataFromRequest(null, mockResp);
    //Argument of type '"error"' is not assignable to parameter of type 'never'.
    //mockResp.error.mockReturnValue("error");    
    mockResp.error.mockImplementation()
    expect(resultData).toBeFalsy();
    expect(mockResp.error).toHaveBeenCalled(); 
    //expect(mockResp.error).toEqual("error");
    
  });
})

Как мы можем проверить строку сообщения об ошибке? т.е. в dh. js мы возвращаем resp.error ("error") Я хотел бы проверить возврат сообщения для этой функции. Есть ли способ проверить сообщение? Я попытался имитировать возвращаемое значение, но у него никогда не было типа, что я не мог установить значение.

...