node.js - Node js中的单元测试/模拟谷歌数据存储

标签 node.js unit-testing google-app-engine google-cloud-datastore google-cloud-node

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);
    });
}

我想对上面的代码进行单元测试,但我不知道如何模拟/ stub 谷歌云数据存储对象/方法。例如,我想模拟/ stub datastore.createQuery('Test'),但不知道怎么做。

最佳答案

您无能为力。要么自己模拟整个数据存储,使用本地模拟器,要么只模拟每个测试用例所需的方法。

第一种方法可能费力且复杂,但可以保证最佳的响应时间和测试速度。

第二种方法也可以,但在我的实践中,这种方法并不比项目中的真实数据存储快。我的意思是,我机器中的本地仿真器响应时间大约为 30 毫秒 - 400 毫秒,这几乎与使用远程数据存储实例相同。不知道为什么,也许我做错了什么。你至少可以试试。

第三种方法,介于前两种方法之间,但您将开始测试实现而不是行为,这样的测试变得毫无用处。但是,这只是我对这种方法的看法。

还有一种方法,第四种就是分解这种方法,所以他们没有数据库通信代码,只有算法部分。测试这样的代码,而不是调用数据库方法的代码。

关于node.js - Node js中的单元测试/模拟谷歌数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47089099/

相关文章:

unit-testing - 模拟与测试数据库?

python - 使用非 ASCII 字符在 Python 中执行文件 I/O

python - GAE 谷歌图书 API

javascript - 我的应用程序没有在按钮上关闭,electron.js

javascript - 模拟 node.js 模块

c# - 如何使用 Entity Framework Core 模拟异步存储库

java - 应用程序引擎的全局捕获 - java sdk

node.js - 具有多个参数的 POST 请求

javascript - NodeJS 的 https 模块是否遵循重定向?

java - maven中根据src文件夹自动生成类用于测试