const Datastore = require('@google-cloud/datastore');
const datastore = Datastore();
function listTasks(res) {
const query = datastore.createQuery('Test');
datastore.runQuery(query)
.then((results) => {
const tasks = results[0];
tasks.forEach((task) => {
const taskKey = task[datastore.KEY];
console.log(taskKey.id, task);
});
res.send(tasks);
})
.catch((err) => {
console.error('ERROR:', err);
});
}
Run Code Online (Sandbox Code Playgroud)
我想对上面的代码进行单元测试,但是我不知道如何模拟/存根谷歌云数据存储对象/方法。例如,我想模拟/存根datastore.createQuery('Test'),但不知道如何。
google-app-engine unit-testing node.js google-cloud-datastore google-cloud-node
我使用 Google Cloud Datastore 来存储由数据存储生成的 ID 作为主键的实体。此外,在本例中,我还存储每个实体的其他属性owner。
实体在 Google Cloud Datastore 控制台中如下所示:
|Name/ID |owner |...|
|id=5657437197565952 |5634472569470976|...|
Run Code Online (Sandbox Code Playgroud)
然后我想根据key (id)和 属性过滤实体owner过滤实体。
为此,我知道我需要一个复合索引才能同时过滤字段(id)和所有者。所以我使用以下index.yaml文件创建了一个复合索引:
indexes:
- kind: job
ancestor: no
properties:
- name: __key__
- name: owner
# AUTOGENERATED
Run Code Online (Sandbox Code Playgroud)
索引显示在云控制台中,如果我使用云控制台 UI 过滤这两个字段,它会过滤表中的正确实体。我在那里做的过滤器是:
key(job,5657437197565952)5634472569470976但是,当我尝试使用以下代码通过 Google 的 Node.js 库检索该实体时,我没有得到任何结果:
const {Datastore} = require('@google-cloud/datastore');
async function quickStart() {
const projectId = 'myproject';
// Creates a client
const datastore = new Datastore({
projectId: projectId,
}); …Run Code Online (Sandbox Code Playgroud)