标签: google-cloud-node

Node.js中的单元测试/模拟Google数据存储

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

2
推荐指数
2
解决办法
940
查看次数

我需要在 Google Cloud Datastore 中使用什么索引才能根据 ID 和其他属性进行过滤?

我使用 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)

node.js google-cloud-datastore google-cloud-node

1
推荐指数
1
解决办法
2306
查看次数