클라우드 컴퓨팅이 필요하신가요? 지금 시작해보세요

Dark background with blue code overlay

Jest Mocks - EdgeWorkers용 단위 테스트

Akamai author

에 의해 작성

Varuna GP

September 08, 2021

Akamai author

에 의해 작성

Varuna GP

Akamai Technologies의 제품 담당 매니저인 바루나(Varuna)는 제품 개발 팀과 협력하여 정량적 제품 데이터를 수집하고 소비자 피드백을 해석하며 제품 전략을 개발하는 등 새로운 기능을 생성하고 있습니다.

참고: 본 튜토리얼의 단계는 추후 변경될 수 있습니다. GitHub에서 최신 지침을 참고하세요. 

EdgeWorkers를 사용하면4,200개 이상의 위치에서 JavaScript 코드를 실행해 사용자에게 가까이 다가가고 애플리케이션 응답 시간을 단축할 수 있습니다. 

점점 더 많은 애플리케이션 기능이 엣지로 이동함에 따라 각 기능이 필요한 작업을 올바로 수행하는지 확인하는 것이 중요해지고 있습니다. 단위 테스트(Unit Test)는 프로그램의 각 세그먼트에 대해 코드를 실행해 인풋과 아웃풋을 확인합니다. 개발자는 이러한 테스트를 실시해 프로그램의 개별 영역을 검사하고 오류가 발생하는 위치(및 이유)를 확인할 수 있습니다. Jest, Mocha, Jasmine, Cypress 같은일반적인 프레임워크를 비롯한여러 가지 프레임워크를통해 쉽게 테스트할 수 있습니다.에 대한 접속을 동기화합니다. 

개발자는 EdgeWorkers를 활용해 엣지에서 다음과 같은 모의 테스트를 실행할 수 있습니다. 

  • 코드가 Akamai에 게시되기 전에 구문적으로 유효한지, 아무 문제 없이 실행되는지 확인

  • 비즈니스 논리가 제대로 작동하는지 확인

  • 회사의 보안 방화벽 뒤에서 변경 사항 테스트(원격 시스템에 의존하지 않음)

  • 코드나 Akamai의 자바스크립트 버전 변화에 관계없이 비즈니스 로직이 작동하도록 보장

이 블로그 게시물에서는 변경 사항을 배포하기 전에 비즈니스 로직이 제대로 작동하는지 확인하고 회귀 리스크를 줄이기 위해 Jest로 단위 테스트를 설정하는 방법에 대해 설명합니다.

배경 정보

Jest는 설정이 필요하지 않으며 배우기 쉬운 프레임워크 중 하나입니다. npm이나 노드에서는 이와 동등한 패키지를 사용할 수 없으므로 Node.js의 EdgeWorkers API에 대해 자바스크립트를 테스트할 수 있는 Jest 모의 예제를 만들었습니다. 이 수동 모의 예제를 사용하여 해당 기능을 보다 정밀하게 제어할 수 있습니다. 

EdgeWorkers 리포지토리는 EdgeWorkers API용 Jest 모의 예제를 제공합니다. Akamai EdgeWorkers 실행 환경에서 일련의 모듈과 개체가 제공됩니다. 

참고: 테스트는 Node에서 실행됩니다. Node와 EdgeWorkers 모두 V8을 기반으로 실행되지만, EdgeWorkers에 대해 일부 기능은 명시적으로 비활성화되며, EdgeWorkers(시간 및 메모리)에 대한 실행 제한이 있으므로 개발자는 Node API를 사용하지 않도록 주의해야 합니다.

이제 어떻게 시작하는지 알아보겠습니다. 

EdgeWorkers 구조

EdgeWorker의 구조는 다음과 같습니다.

src - main.js 및 bundle.json의 위치입니다. 모든 추가 모듈이 여기로 갑니다.

test - 단위 테스트

테스트 생성 및 실행

1단계: 새 프로젝트 시작

새 프로젝트를 만들려면 아래 명령을 실행합니다.

  npm init

2단계: Node 모듈 설치

여기서는 config 파일 설정과 함께 설치해야 할 노드 모듈을 가져오는 방법을 살펴보겠습니다.

이 프로젝트의 모의 예제는 노드 모듈 edgeworkers-jest-mocks로 게시됩니다. 모듈을 설치하려면 다음 명령을 실행합니다.

  npm install --save-dev edgeworkers-jest-mocks

3단계: package.json 설정

package.json 파일에 다음과 같이 설정되어 있는지 확인합니다.

테스트 스크립트를 Jest로 설정

 

  "scripts": {
  "test": "jest"
},

Jest 설정

EdgeWorkers API를 쉽게 가져올 수 있도록 먼저 Jest를 설정합니다.

  "jest": {
  "testEnvironment": "node",
  "transformIgnorePatterns": [
    "node_modules/(?!edgeworkers-jest-mocks/__mocks__)"
  ],
  "moduleDirectories": [
    "node_modules",
    "node_modules/edgeworkers-jest-mocks/__mocks__"
  ]
}

4단계: babel.config.json 설정

Babel은 Akamai EdgeWorkers에서 사용하는 최신 ECMAScript 버전을 작성하는 데 종속되어 있습니다. 이를 올바르게 설정하려면 babel.config.json 파일로 다음을 추가하기만 하면 됩니다. 

참고: JSON 파일이 없는 경우 babel.config.json을 만들고 이름을 지정해야 합니다.

  {
  "presets": ["@babel/preset-env"],
  "plugins": [
    ["@babel/transform-runtime"]
  ]
}

5단계: 테스트 작성

EdgeWorker 또는 해당 함수를 main.js 파일에서 가져온 후에는 필요한 모든 종류의 테스트를 작성할 수 있습니다. EdgeWorker 이벤트 핸들러에 대한 테스트는 요청 또는 응답 모의 예제를 생성한 후 모의 예제에서 이벤트 핸들러 함수를 호출해야 합니다.

다음은 src/main.js의 EdgeWorker에 대해 Jest로 작성된 간단한 예제 테스트입니다.

  import * as edgeworker from "../src/main.js";
import Request from 'request';

describe('Simple Example', () => {

    beforeEach(() => {
        jest.clearAllMocks();
    });
  
    test("functional test against onClientRequest", async () => {
        let requestMock = new Request();
        edgeworker.onClientRequest(requestMock);

        expect(requestMock.respondWith).toHaveBeenCalledTimes(1);
        expect(requestMock.respondWith).toHaveBeenCalledWith(200, {}, "<html><body><h1>Test Page</h1></body></html>");
    });

    test("unit test an edgeworker function", async () => {
        let result = edgeworker.someFunction(42);

        expect(result != null);
    });

}); 

6단계: 테스트 실행

테스트는 Jest 프레임워크를 통해 제공됩니다. 단위 테스트를 실행하려면 명령줄에서 다음 명령을 실행합니다.

  npm test

Jest 규칙에 따라 테스트 디렉터리의 모든 테스트가 실행됩니다. 

자세한 내용은 아래 자료에서 확인하세요. Akamai는 Akamai와의 업무 방식을 간소화하는 데 도움이 되는 개발자 툴 및 자료 목록을 지속적으로 강화하고 있습니다.  

추가 자료

코드 샘플에 문제가 있는 경우 GitHub에 이슈를 제기하거나 EdgeWorkers Slack 스페이스에서 개발자에게에게 감사의 말을 전합니다.



Akamai author

에 의해 작성

Varuna GP

September 08, 2021

Akamai author

에 의해 작성

Varuna GP

Akamai Technologies의 제품 담당 매니저인 바루나(Varuna)는 제품 개발 팀과 협력하여 정량적 제품 데이터를 수집하고 소비자 피드백을 해석하며 제품 전략을 개발하는 등 새로운 기능을 생성하고 있습니다.