我有一个以这样的触发器开始的功能:
exports.generateThumbnail = functions.storage.object().onChange(event => {
如何在本地测试?我已经阅读了Firebase的本地测试文档,但是有人可以给我一个如何在本地触发此示例的示例,目前有点令人困惑。谢谢!
答案 0 :(得分:11)
要在本地测试Firebase云功能,您有两种选择:
后者仅适用于HTTPS功能,因此它实际上与您的目的无关(您正在测试存储触发功能)。
让我们从项目的functions
目录中调用Cloud Functions Shell:
$ npm i -g firebase-tools@latest
...
$ firebase --version
3.17.3
$ firebase experimental:functions:shell
i functions: Preparing to emulate functions.
✔ functions: generateThumbnail
firebase >
这为您提供了一个交互式shell,您可以在其中直接执行函数:
firebase > generateThumbnail()
'Successfully invoked function.'
...
或者其他任何JavaScript代码:
firebase > console.log(Math.random())
0.17387339404246105
undefined
在本地测试函数时,您将无法收到真正的Firebase存储事件,因此,您必须使用测试数据调用函数。
对于Storage,Auth和Crashlytics函数,调用本地 使用您希望在其中查看的测试数据 功能。您的测试数据必须遵循相应的数据格式:
- 云存储:ObjectMetadata
- 用于身份验证:UserRecord
- 对于Crashlytics:问题
仅指定代码所依赖的字段,如果只想运行该函数,则根本不指定。
好的,接下来你需要创建一些符合ObjectMetadata
的测试数据在项目的testData.json
目录中创建一个包含以下内容的文件functions
。请注意相应的ObjectMetadata
字段:
{
"bucket": "unique-name-of-your-app.appspot.com",
"contentDisposition": "inline; filename*=utf-8''test.png",
"contentType": "image/png",
"crc32c": "LaOnCg==",
"etag": "CeDut9jz5dgCFAE=",
"generation": "1416567827822212",
"id": "unique-name-of-your-app.appspot.com/test.png/1416567827822212",
"kind": "storage#object",
"md5Hash": "N2rxNWE0ZGRtZmE0Y2M2NDIyOWY5NzIeNzA4YzdizjU=",
"mediaLink": "https: //www.googleapis.com/download/storage/v1/b/unique-name-of-your-app.appspot.com/o/test.png?generation=1416567827822212&alt=media",
"metadata": {
"firebaseStorageDownloadTokens": "1cbc7278-9e5b-4d05-a5de-91a3a067a4bc"
},
"metageneration": "1",
"name": "test.png",
"resourceState": "not_exists",
"selfLink": "https: //www.googleapis.com/storage/v1/b/unique-name-of-your-app.appspot.com/o/test.png",
"size": "168501",
"storageClass": "STANDARD",
"timeCreated": "2018-01-21T20: 33: 47.739Z",
"timeDeleted": "2018-01-21T20: 33: 58.207Z",
"timeStorageClassUpdated": "2018-01-21T20: 33: 47.739Z",
"updated": "2018-01-21T20: 33: 47.739Z"
}
正如文档所说,您不一定需要所有这些字段,使用您实际需要的字段进行测试。
现在您可以返回Cloud Functions Shell并导入测试数据:
firebase > const testData = require('./testData.json')
undefined
使用测试数据作为参数调用函数:
firebase > generateThumbnail(testData)
'Successfully invoked function.'
...
要进一步自动化,您还可以创建包含以下内容的testFunction.js
文件:
const testData = require('./testData.json');
generateThumbnail(testData);
现在,您不必手动将所有这些输入到Cloud Functions Shell中,而只需从操作系统的shell中执行它,并通过标准输入重定向testFunction.js
:
$ firebase experimental:functions:shell < ./testFunction.js
i functions: Preparing to emulate functions.
✔ functions: generateThumbnail
firebase > const testData = require('./testData.json');
undefined
firebase > generateThumbnail(testData);
'Successfully invoked function.'
...
希望这有帮助。