typescript - Firestore 安全规则中的单元测试时间戳字段规则
问题描述
我正在使用 node.js 库为我的 firestore 安全规则编写单元测试@firebase/rules-unit-testing
这是我更新文档的安全规则:
allow update: if request.auth.uid != null &&
request.auth.uid == userId &&
request.resource.data.updatedAt == request.time;
我希望该updatedAt
字段始终设置为FieldValue.serverTimestamp()
.
在我的单元测试中,我试图更新值FieldValue.serverTimestamp()
并验证它是否应该成功。这是我的代码片段:
let testEnvironment: RulesTestEnvironment = await initializeTestEnvironment({
projectId: PROJECT_ID,
firestore: {
rules: fs.readFileSync("../firestore.rules", "utf8"),
host: "localhost",
port: 8080
}
})
const firestore = testEnvironment.authenticatedContext("user_123").firestore()
const testDoc = firestore.doc("/writers/user_123")
await assertSucceeds(testDoc.update(
"some_field", "some_value", "updatedAt", firestore.FieldValue.serverTimestamp()
))
在这种情况下,firestore.FieldValue
未定义。
我尝试使用 admin SDK firebase-admin
,将最后一条语句更改为:
await assertSucceeds(testDoc.update(
"some_field", "some_value", "updatedAt", admin.firestore.FieldValue.serverTimestamp()
))
为此,我得到了错误-
FirebaseError:使用无效数据调用函数 DocumentReference.update()。不支持的字段值:自定义对象(在文档 writers/user_123 的字段 updatedAt 中找到)
谁能建议如何为时间戳字段更新添加测试?
解决方案
您传递的数据格式不正确
尝试这个:
await assertSucceeds(testDoc.update(
{some_field: "some_value", updatedAt: admin.firestore.FieldValue.serverTimestamp()})
推荐阅读
- javascript - 使用 axios 在 Node js 中未定义的标头
- apache - 如何将根目录中的所有文件仅重定向到另一个目录?
- java - 为什么我的第一个解决方案比我的 Leetcode 问题(单词搜索)的第二个解决方案运行得慢?
- ios - UIImagePickerController 扩展发现失败并出现错误:(null)
- python - 是否有删除(在df1中)两个df中不同行的功能?
- c++ - 如何在c++程序中找到函数的地址
- android - 如何使用 Google 帐户登录 Android Studio?
- django - DRF:图像与字段命名
- java - Java Word Appache POI - 垂直对齐单元格内容/删除文本后的空格
- python - OSError [Errno 22] 的异常处理问题