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 호출 가능 기능을 로컬로 호출할 때 적절한 테스트 데이터를 제공해야 합니다.

# 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'}})

Analytics 함수 호출

셸에서 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 함수의 경우 함수 내부에서 확인하려는 테스트 데이터로 로컬 함수를 호출합니다. 테스트 데이터는 해당 데이터 형식을 따라야 합니다.

코드가 의존하는 필드만 지정하거나 함수만 실행하려는 경우에는 지정하지 않습니다.