gpt4 book ai didi

node.js - 模拟存储库,然后换成 Node.js 中的实际实现

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:59 25 4
gpt4 key购买 nike

我正在为上面的抽象构建一个具有更高级别 API 的存储库层,以调用数据库持久性。但是,由于 JavaScript 不像 C# 或 Java 等语言那样具有接口(interface)的概念,因此如何将模拟替换为真正的实现?

我更喜欢创建自定义模拟、 Node 存储库模块,其中包含数据持久性高级方法,而不是 Sinon.js 或类似的东西。

如果我要创建 Node 模块,那么如何创建?我可以发送存储库的模拟表示,在其中模拟存储库方法正在执行的操作,但使用这些存储库模块的实际 Node 模块将需要使用调用真实数据库的真实存储库实现。这在 Node 中是如何完成的?我只想通过属性注入(inject),我也不想要一些巨大的注入(inject) IoC 框架。

既然没有接口(interface)的概念,那你在 Node/JS 中做什么呢?我必须在存储库下面创建一个数据层(无论它是一组自定义模块,对 Postgres 进行真正的查询调用,还是我使用 Mongoose 或其他任何东西,我需要存储库调用的一组 DL 模块这是真正的数据库调用)。

假设我确实选择使用像Sinon.js这样的框架,您正在模拟的模块的通用接口(interface)是什么,可以由模拟框架和真实模块共享?

最佳答案

有不止一种方法可以做到这一点。如果您来自不同的背景,可能需要一些时间来适应 Node。

你可以这样做:

module.exports = function(db) {
this.db = db;

this.myQuery = function(n, cb) {
this.db.query(n, cb);
}
}

然后在config.js

var exports.db = require('./mydb');

然后

var config = require('./config.js');
var db = require('./db')(config.db);

有很多可能的变化。您可以基于字符串或其他内容在某处执行动态 require 。或者使用类或初始化函数。大多数最终可能都会相似。

proxyrequire 模块可能会有所帮助。 Sinon.js 也可以。

由于确实没有类型检查,人们通常会在运行时通过测试来验证这一点。如果你真的在做 TDD,它可能不会产生很大的影响。

关于node.js - 模拟存储库,然后换成 Node.js 中的实际实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32429439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com