JavaScript Action sing Type Script 테스트에 대한 Tips를 쓰기 위해 Giithub API 호출

Create a JavaScript Action using TypeScript를 토대로 타입 스크립트로 자바스크립트 액션을 썼을 때 테스트 방법은 기존 창고만 몰랐기 때문에 기록됐다.

테스트 대상 코드


https://github.com/nokamoto/merge-conflict-action
import * as github from "@actions/github";

export async function listPulls(){
  const octokit = github.getOctokit(token);

  return octokit.rest.pulls
    .list({
      owner: owner,
      repo: repo,
    })
}
@actions/github에서 Rest API를 호출하는 부분을 모듈화하려고 합니다.
조사한 느낌octokit/fixtures도 쓸 수 있을지 모르지만, 코트처럼 보이기 때문에 써볼까jest해보자.

모듈식 테스트 코드


  const setup = (list: jest.Mock) => {
    const getOctokit = jest.fn().mockImplementation(() => {
      const { GitHub } = jest.requireActual("@actions/github/lib/utils");
      return {
        ...GitHub,
        rest: {
          pulls: { list: list },
        },
      };
    });

    jest.spyOn(github, "getOctokit").mockImplementation(getOctokit);

    return [getOctokit];
  };
getOctokitspyOn로 모듈화.
const { GitHub } = jest.requireActual("@actions/github/lib/utils");
GitHub를 주지 않으면 tsc에서 컴파일 오류가 토출되어 시험 오류가 발생합니다.

모듈의 테스트 코드 사용


    const list = jest.fn().mockImplementation(() =>
      Promise.resolve({
        data: [],
      })
    );

    const [getOctokit] = setup(list);
정상적인 시스템의 응답을 테스트한 상황에서 되돌아오기Promise.resolve의 실현을 제공한다.
    const list = jest
      .fn()
      .mockImplementation(() => Promise.reject(new Error("failed")));

    const [getOctokit] = setup(list);
이상 시스템의 응답을 테스트한 상황에서 되돌아오기Promise.reject의 실현을 제공한다.

신경 쓰이는 일

Promise.resolve 반환 형식이 적당하기 때문에 실행할 때 오류가 발생할 수 있습니다.하지만 형식적으로 제한이 너무 많아도 테스트를 쓰는 것도 귀찮을 것 같아서 어쩔 수 없어요.

좋은 웹페이지 즐겨찾기