Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

대화식으로 기능 테스트

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Cloud Functions 셸은 테스트 데이터로 함수를 호출하기 위한 대화형 셸을 제공합니다. 쉘은 모든 트리거 유형을 지원합니다.

관리자 자격 증명 설정(선택 사항)

함수 테스트가 Firebase Admin SDK 를 통해 Google API 또는 기타 Firebase API와 상호작용하도록 하려면 관리자 자격 증명을 설정해야 할 수 있습니다.

  • Cloud Firestore 및 실시간 데이터베이스 트리거에는 이미 충분한 자격 증명이 있으므로 추가 설정이 필요하지 않습니다 .
  • 인증 및 FCM과 같은 Firebase API 또는 Cloud Translation 또는 Cloud Speech와 같은 Google API를 포함한 다른 모든 API에는 이 섹션에 설명된 설정 단계가 필요합니다. 이는 Cloud Functions 셸을 사용하든 firebase emulators:start 를 사용하든 관계없이 적용됩니다.

에뮬레이트된 기능에 대한 관리자 자격 증명을 설정하려면:

  1. Google Cloud Console의 서비스 계정 창 을 엽니다.
  2. App Engine 기본 서비스 계정 이 선택되어 있는지 확인하고 오른쪽의 옵션 메뉴를 사용하여 키 만들기 를 선택합니다.
  3. 프롬프트가 표시되면 키 유형으로 JSON 을 선택하고 작성을 클릭 하십시오 .
  4. 다운로드한 키를 가리키도록 Google 기본 자격 증명을 설정합니다.

    유닉스

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase functions:shell
    

    윈도우

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase functions:shell
    

이 단계를 완료하면 함수 테스트에서 Admin SDK 를 사용하여 Firebase 및 Google API에 액세스할 수 있습니다. 예를 들어 인증 트리거를 테스트할 때 에뮬레이트된 함수는 admin.auth().getUserByEmail(email) 을 호출할 수 있습니다.

Cloud Functions 셸을 사용하여 함수 제공

Cloud Functions 셸은 테스트 데이터로 함수를 호출하기 위한 대화형 셸로 모든 유형의 함수 트리거를 에뮬레이션합니다. 옵션은 함수 유형에 따라 다르지만 기본 사용 형식은 다음과 같습니다.

myFunctionName(data, options)

data 매개변수는 실시간 데이터베이스, Cloud Firestore 및 PubSub 트리거에 필요하며 다른 모든 함수 유형에는 선택사항입니다. 또한 선택적 options 매개변수는 실시간 데이터베이스 및 Cloud Firestore 기능에만 유효합니다.

선택적으로 파일을 변수로 저장하고 이를 사용하여 함수를 호출하여 로컬 파일에서 테스트 데이터를 로드할 수 있습니다.

var data = require('./path/to/testData.json');
myFunction(data);

Cloud Functions 셸 설치 및 구성

이 기능을 사용하려면 firebase firebase-tools 버전이 3.11.0 이상이어야 하고 firebase firebase-functions SDK의 버전이 0.6.2 이상이어야 합니다. 둘 다 업데이트하려면 프로젝트의 functions/ 디렉터리에서 다음 명령을 실행합니다.

npm install --save firebase-functions@latest
npm install -g firebase-tools

사용자 지정 함수 구성 변수를 사용하는 경우 먼저 명령을 실행하여 로컬 환경에서 사용자 지정 구성을 가져옵니다( functions 디렉터리 내에서 실행).

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

마지막으로 다음 명령으로 셸을 실행합니다.

firebase functions:shell

HTTPS 함수 호출

셸에서 HTTPS 함수를 호출하는 경우 사용법은 request NPM 모듈과 동일하지만 request 을 에뮬레이트하려는 함수의 이름으로 바꿉니다. 예를 들어:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

HTTPS 호출 가능 함수 호출

HTTPS Callable 함수를 로컬에서 호출할 때 적절한 테스트 데이터를 제공해야 합니다.

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

선택적으로 Firebase-Instance-ID-token 을 두 번째 매개변수로 전달할 수 있습니다. 문자열이어야 합니다.

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

context.auth 의 에뮬레이션은 현재 사용할 수 없습니다.

실시간 데이터베이스 함수 호출

실시간 데이터베이스 기능을 로컬에서 실행하는 경우 적절한 테스트 데이터를 제공해야 합니다. 이것은 일반적으로 onCreate 작업을 위한 새로운 테스트 데이터, onDelete 작업을 위한 오래된/제거된 데이터, 그리고 onUpdate 또는 onWrite 함수 모두를 제공하는 것을 의미합니다.

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

before/after 옵션 외에도 셸은 경로에서 와일드카드 모의에 사용할 params 옵션을 제공합니다.

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

기본적으로 셸은 관리자(서비스 계정) 권한으로 실시간 데이터베이스 기능을 실행합니다. auth 옵션을 사용하여 대신 특정 최종 사용자 또는 인증되지 않은 사용자로 함수를 실행합니다.

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

Firestore 함수 호출

Firestore 기능을 로컬에서 실행할 때 적절한 테스트 데이터를 제공해야 합니다. 이는 일반적으로 onCreate 작업을 위한 새 테스트 데이터, onDelete 작업을 위한 이전/제거된 데이터, onUpdate 또는 onWrite 기능 모두를 제공하는 것을 의미합니다. Firestore 데이터는 키-값 쌍이어야 합니다. 지원되는 데이터 유형 을 참조하십시오.

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

data 객체의 before/after 필드 외에도 options 객체의 params 필드를 사용하여 문서 이름에서 와일드카드를 모방할 수 있습니다.

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

셸은 항상 관리 권한으로 Firestore 기능을 실행합니다. 즉, 관리 사용자가 수행한 것처럼 생성/업데이트/삭제 이벤트를 조롱합니다.

PubSub 함수 호출

PubSub 함수의 경우 메시지 페이로드를 Buffer 인스턴스에 삽입하고 선택적으로 다음과 같이 데이터 속성을 추가합니다.

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

분석 기능 호출

셸에서 myAnalyticsFunction() 을 실행하여 데이터 없이 Analytics 함수를 호출할 수 있습니다. 테스트 데이터로 함수를 실행하려면 함수에 필요한 특정 이벤트 데이터 필드에 대한 변수를 정의하는 것이 좋습니다.

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

저장소 및 인증 기능 호출

Storage 및 Auth 함수의 경우 함수 내부에서 확인하려는 테스트 데이터로 로컬 함수를 호출합니다. 테스트 데이터는 해당 데이터 형식을 따라야 합니다.

코드가 의존하는 필드만 지정하거나 함수만 실행하려는 경우에는 지정하지 마십시오.