使用 @firebase/rules-unit-testing
测试 firebase 安全规则,如何测试文档的 createdAt 字段是否为当前时间?这是用于 Cloud Firestore。
借助 Firebase 安全规则,您可以确保将字段保存为服务器时间戳。
match /collection/{docId} {
allow create: if request.time == request.resource.data.createdAt
}
此安全规则有效。如果你要在浏览器中写入文档,你会这样做:
firebase.firestore().collection('collection').add({
createdAt: firebase.firestore.FieldValue.serverTimestamp()
})
但是,@firebase/rules-unit-testing
中不存在服务器时间戳方法。
这是测试设置的样板,使用 Jest:
import { initializeTestApp } from '@firebase/rules-unit-testing'
const app = initializeTestApp({ projectId: 'id' })
test('some test', async () => {
firebase.assertSuccees(
app.firestore().collection('collection').add({
createdAt: firebase.firestore.FieldValue.serverTimestamp()
})
)
})
问题在于未定义 firebase.firestore.FieldValue
(与浏览器示例不同)。
此外,app.firestore.FieldValue
也未定义。
那么如何获取服务器时间戳来测试此安全规则?