>

다음 함수에 대한 단위 테스트 사례를 작성하려고합니다 :

export function exportTableToCSV(data, columns, filename) {
    const csv = encode(data, columns);
    downloadCsv(csv, filename);
}

여기 테스트 사례 :

exportTableToCSV = jest.fn();
it('testing exportTableToCSV function', () => {
    const data = {
        "Linkname": "ATL-HOU",
        "Anode": "ATL:pos0/1",
        "Aloc": "ATL"
    }
    const columns = Object.keys(data);
    const filename = "data.csv";
    exportTableToCSV(data,columns,filename);
    expect(exportTableToCSV).toHaveBeenCalledWith(data,columns,filename);
}

이 작동하지만 추가하려고 할 때 :

expect(encode).toHaveBeenCalledWith(data,columns);

그것은 호출되지 않았다는 오류를 나타냅니다. 누군가 위의 함수에 대한 테스트 케이스를 작성하는 올바른 방법이 무엇인지 안내해 줄 수 있습니까?

  • 답변 # 1

    나는 exportTableToCSV 를 믿는다  이것은 진짜 exportTableToCSV 가 아닙니다 , 그것은 jest.fn() 입니다 . 진짜 exportTableToCSV   encode() 를 호출합니다 ,하지만 당신은 여기에 실제 하나를 사용하지 않으므로 encode()  호출되지 않습니다.

    실제 exportTableToCSV() 를 가져 오는 방법 중 하나는  그리고 encode() 가   jest.fn() 로 . 그런 다음 exportTableToCSV() 에 전화하면 , encode() 를 기대하십시오  부름을 받으면 둘 다 호출되었음을 증명할 것입니다.

    여러 가지 방법이 있습니다 :

    import { exportTableToCSV } from './foo'
    it('testing exportTableToCSV function', () => {
      const mockEncodeResult = 'i am a mock';
      const encode = jest.fn((data, columns) => mockEncodeResult);
      const downloadCsv = jest.fn((csv, filename) => {});
      const testData = {
        Linkname: 'ATL-HOU',
        Anode: 'ATL:pos0/1',
        Aloc: 'ATL',
      };
      const testColumns = Object.keys(testData);
      const testFilename = 'data.csv';
      exportTableToCSV(testData, testColumns, testFilename);
      expect(encode).toHaveBeenCalledWith(testData, testColumns);
      expect(downloadCsv).toHaveBeenCalledWith(mockEncodeResult, testFilename);
    });
    
    

    참고 : 위의 예에서 나는 exportTableToCSV 를 조롱하지 않습니다. . 와이즈 비즈  모의입니다. 이 단위 테스트는 실제 jest.fn() 를 가져오고 테스트합니다.  기능, 그러나 그것은 exportTableToCSV 를 조롱  그리고 encode() . 건배!

    업데이트 ---

    귀하의 의견에 따라 downloadCsv() 에 대한 오류가 표시됩니다 , 그러나 이것은 제공된 샘플 코드에 없습니다. 분명히 createObjectURL 와 함께 가져올 모듈에 문제가있는 코드가 있습니다. . 이 문제를 해결하는 올바른 방법은 문제가있는 코드를 조롱하고 정리하는 것이지만 여기에 자체 솔루션을 제공하고 싶기 때문에 두 번째로 좋은 방법은 exportTableToCSV 를 조롱하는 것입니다.  그 자체. 이 경우 원래 기능은 테스트하지 않고 모의 객체 만 테스트합니다. exportTableToCSV 를 제거   import 정의 후 테스트 케이스 범위 안에 다음을 추가하고 추가하십시오. :

    downloadCsv
    
    
    const exportTableToCSV = jest.fn((data, columns, filename) => { const csv = encode(data, columns); downloadCsv(csv, filename); });

  • 이전 asp.net - azure 웹 사이트 배포 실패 - 동일한 종속 어셈블리의 다른 버전간에 충돌이 발견되었습니다
  • 다음 python - int 나 str 대신 어떤 유형을 사용해야합니까?