Javascript 时间戳不适用于firebase函数测试

Javascript 时间戳不适用于firebase函数测试,javascript,firebase,testing,google-cloud-firestore,firebase-admin,Javascript,Firebase,Testing,Google Cloud Firestore,Firebase Admin,我正在使用firebase admin 8.6.0和firebase functions test 0.1.6,它在测试中支持Firestore时间戳(从0.1.5开始),但在尝试将它们与test.Firestore.makeDocumentSnapshot一起使用时,仍然收到错误消息 有人能帮我理解我实现中的错误吗 import * as admin from 'firebase-admin'; admin.initializeApp(); const db = admin.firestore

我正在使用firebase admin 8.6.0和firebase functions test 0.1.6,它在测试中支持Firestore时间戳(从0.1.5开始),但在尝试将它们与
test.Firestore.makeDocumentSnapshot
一起使用时,仍然收到错误消息

有人能帮我理解我实现中的错误吗

import * as admin from 'firebase-admin';
admin.initializeApp();
const db = admin.firestore();
const settings = { timestampsInSnapshots: true};
db.settings(settings);

const timestamp = admin.firestore.FieldValue.serverTimestamp();
const testingTimestamp1 = admin.firestore.Timestamp.now();
const testingTimestamp2 = admin.firestore.Timestamp.fromDate(new Date);

import * as TestFunctions from 'firebase-functions-test';

const firebaseConfig = {
    databaseURL: 'https://...HIDDEN...',
    projectId: '...HIDDEN...',
    storageBucket: '...HIDDEN...appspot.com',
}

const test = TestFunctions(firebaseConfig, 'service-account-dev.json');

const data({
  timestamp,
  testingTimestamp1,
  testingTimestamp2,
});

const snap = test.firestore.makeDocumentSnapshot(data, path);

const wrapped = test.wrap(processImport);
await wrapped(snap, {params: testParams});
我无法让三个时间戳选项中的任何一个工作。后一个我试着从@the0rem中学习,但没有效果。我总是收到以下错误:

无法将[object]编码为Firestore值。本地测试尚不支持Firestore地理点`


当我看到你的问题时,我很兴奋,因为我刚刚面临同样的问题。不管怎样,我终于解决了这个问题。这是我从Firestore数据库保存的JSON数据:

const customer = { 
    username: "A8tAz6wdtucMNKvWSgDkx4bquc2", 
    timestamp: { 
        _seconds: 1578762627, 
        _nanoseconds: 828000000 
    }, 
    role: "user" 
};
请注意,
timestamp
只是一个具有两个属性的普通对象:
\u秒
\u纳秒
。这就是错误“无法将[object object]编码为Firestore值”的原因,即数据对象
customer
,包含Firestore无法解析的另一个对象
timestamp
。我们要解决的是确保
timestamp
不是一个普通对象,而是
admin.firestore.timestamp
的实例。以下是您如何做到这一点:

const seconds = customer.timestamp._seconds;
const nanosecs = customer.timestamp._nanoseconds;

// create a new Timestamp object passing in the required constructor arguments
const properTimestamp = new admin.firestore.Timestamp(seconds, nanosecs);
customer.timestamp = properTimestamp; // update the timestamp reference in your data object
// Now you can do this
test.firestore.makeDocumentSnapshot(customer, '/users/A8tAz6wdtucMNKvWSgDkx4bquc2')
现在如果您执行
console.log(客户)
您将看到timestamp对象是
admin.firestore.timestamp
的一个实例,以下是控制台输出:

// OUTPUT
{
    username: 'A8tAz6wdtucMNKvWSgDkx4bquc2',
    timestamp: Timestamp { _seconds: 1578762627, _nanoseconds: 828000000 },
    role: 'user'
}
PS:我通过检查Firebase如何解析数据中的值/对象得到了答案。这里是解析失败并引发异常的地方(在文件中:
。/node_modules/firebase functions test/lib/providers/firestore.js:165:15
):


当我看到你的问题时,我很兴奋,因为我刚刚面临同样的问题。不管怎样,我终于解决了这个问题。这是我从Firestore数据库保存的JSON数据:

const customer = { 
    username: "A8tAz6wdtucMNKvWSgDkx4bquc2", 
    timestamp: { 
        _seconds: 1578762627, 
        _nanoseconds: 828000000 
    }, 
    role: "user" 
};
请注意,
timestamp
只是一个具有两个属性的普通对象:
\u秒
\u纳秒
。这就是错误“无法将[object object]编码为Firestore值”的原因,即数据对象
customer
,包含Firestore无法解析的另一个对象
timestamp
。我们要解决的是确保
timestamp
不是一个普通对象,而是
admin.firestore.timestamp
的实例。以下是您如何做到这一点:

const seconds = customer.timestamp._seconds;
const nanosecs = customer.timestamp._nanoseconds;

// create a new Timestamp object passing in the required constructor arguments
const properTimestamp = new admin.firestore.Timestamp(seconds, nanosecs);
customer.timestamp = properTimestamp; // update the timestamp reference in your data object
// Now you can do this
test.firestore.makeDocumentSnapshot(customer, '/users/A8tAz6wdtucMNKvWSgDkx4bquc2')
现在如果您执行
console.log(客户)
您将看到timestamp对象是
admin.firestore.timestamp
的一个实例,以下是控制台输出:

// OUTPUT
{
    username: 'A8tAz6wdtucMNKvWSgDkx4bquc2',
    timestamp: Timestamp { _seconds: 1578762627, _nanoseconds: 828000000 },
    role: 'user'
}
PS:我通过检查Firebase如何解析数据中的值/对象得到了答案。这里是解析失败并引发异常的地方(在文件中:
。/node_modules/firebase functions test/lib/providers/firestore.js:165:15
):


什么是
测试
?你错过了某个地方的导入吗?对不起,@DougStevenson,我在写问题时走了一些捷径,因为我是从多个文件合成片段的。我相信我现在已经掌握了上面代码示例中的所有相关部分。只是为了确保-这个问题的标题是@firebase/testing,这是针对web客户端SDK的,但firebase functions test是针对在云函数上运行的后端代码的。如果不一致,你可以编辑标题吗?如果你的问题是关于FixBasic函数测试,考虑在项目GITHUB上发布一个bug报告。好的指针。我已经更改了标题,我想发布一个bug报告,但是看到它是如何完成的,似乎已经解决并结束了,我想这只是我不理解如何正确实现的问题。因此,这里有一个帖子。什么是
测试
?你错过了某个地方的导入吗?对不起,@DougStevenson,我在写问题时走了一些捷径,因为我是从多个文件合成片段的。我相信我现在已经掌握了上面代码示例中的所有相关部分。只是为了确保-这个问题的标题是@firebase/testing,这是针对web客户端SDK的,但firebase functions test是针对在云函数上运行的后端代码的。如果不一致,你可以编辑标题吗?如果你的问题是关于FixBasic函数测试,考虑在项目GITHUB上发布一个bug报告。好的指针。我已经更改了标题,我想发布一个bug报告,但是看到它是如何完成的,似乎已经解决并结束了,我想这只是我不理解如何正确实现的问题。我现在不在代码中,但下一次我在代码中,我会确保验证这是否有效。看起来很有希望,谢谢!我现在不在代码中,但下次我在代码中,我将确保验证这是否有效。看起来很有希望,谢谢!