>source

My Typescript 핸들러 내에서 다음과 같이 여러 Axios 호출이 있습니다.

export const handler= async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult>=> {
const options= {
   headers: {
      Accept: 'application/json',
     'Content-Type': 'application/json;charset=UTF-8',
     authorization: 'Token',
   },
 };
    const respData= await axios
    .all([
      axios.get('https://jsonplaceholder.typicode.com/todos?_limit=5', options),
      axios.get('https://jsonplaceholder.typicode.com/posts?_limit=5', options)
    ])
    .then(axios.spread((todos, posts)=> showOutput(posts)))
    .catch(err=> console.error(err));
  return {
     statusCode: 200,
     body: JSON.stringify(respData),
  };
};

JEST로 여러 API 호출을 조롱하는 방법은 무엇입니까?

  • 답변 # 1

    사용할 수 있습니다 Jest.Spyon (Object, MethodName)그리고 모의에게axios.get ()다른 해결 된 값을 기반으로하는 방법URL매개 변수.

    외에, Doc.에서 동시성 (더 이상 사용되지 않음), 우린 알아axios.all ()그리고axios.spread ()방법은 더 이상 사용되지 않습니다. 사용하다약속그들을 대체 할 수 있습니다.

    main.ts.:

    import axios from 'axios';
    interface APIGatewayProxyEvent {}
    interface APIGatewayProxyResult {}
    export const handler= async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult>=> {
      const options= {
        headers: {
          Accept: 'application/json',
          'Content-Type': 'application/json;charset=UTF-8',
          authorization: 'Token',
        },
      };
      const respData= await axios
        .all([
          axios.get('https://jsonplaceholder.typicode.com/todos?_limit=5', options),
          axios.get('https://jsonplaceholder.typicode.com/posts?_limit=5', options),
        ])
        .then(axios.spread((todos, posts)=> ({ todos, posts })))
        .catch((err)=> console.error(err));
      return { statusCode: 200, body: JSON.stringify(respData) };
    };
    

    main.test.ts.:

    import { handler } from './main';
    import axios from 'axios';
    describe('69096350', ()=> {
      test('should pass', async ()=> {
        const axiosGetSpy= jest.spyOn(axios, 'get').mockImplementation(async (url)=> {
          if (url=== 'https://jsonplaceholder.typicode.com/todos?_limit=5') {
            return [1, 2, 3, 4, 5];
          } else if (url=== 'https://jsonplaceholder.typicode.com/posts?_limit=5') {
            return ['a', 'b', 'c', 'd', 'e'];
          }
        });
        const actual= await handler({});
        expect(actual).toEqual({
          statusCode: 200,
          body: JSON.stringify({ todos: [1, 2, 3, 4, 5], posts: ['a', 'b', 'c', 'd', 'e'] }),
        });
        expect(axiosGetSpy).toBeCalledWith('https://jsonplaceholder.typicode.com/todos?_limit=5', {
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json;charset=UTF-8',
            authorization: 'Token',
          },
        });
        expect(axiosGetSpy).toBeCalledWith('https://jsonplaceholder.typicode.com/posts?_limit=5', {
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json;charset=UTF-8',
            authorization: 'Token',
          },
        });
        axiosGetSpy.mockRestore();
      });
    });
    

    테스트 결과 :

    PASS  examples/69096350/main.test.ts (7.535 s)
      69096350
        ✓ should pass (4 ms)
    ----------|---------|----------|---------|---------|-------------------
    File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
    ----------|---------|----------|---------|---------|-------------------
    All files |   88.89 |      100 |      75 |   85.71 |
     main.ts  |   88.89 |      100 |      75 |   85.71 | 20
    ----------|---------|----------|---------|---------|-------------------
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        8.035 s, estimated 9 s
    Ran all test suites related to changed files.
    

  • 이전 mysql : 외국 키 생성에 의해 생성 된 MARIADB 인덱스 "작동"
  • 다음 Rails Searchkick은 어디서 문장을 사용할 때 결과를 반환하지 않습니다.