javascript - 模拟笑话网络 - 我如何不干燥我的格式化程序?
问题描述
我有一个网络模块来 ping 具有多种格式数据的遗留数据库,我想在将它传递到应用程序之前在网络模块中对其进行标准化,以便我的应用程序可以期待某种格式的数据(不想要旧的,糟糕的格式污染了我的业务逻辑)。我正在努力解决如何作为这个网络模块传递模拟数据,特别是因为它与格式化程序有关。这就是我的意思:
// User API Network Module
// UserAPI.ts
export const getUser = (uid: String, callback: (GetUserResponse) => void): void => {
// Do network call here and format the data into a typescript type
// matching the GetUserResponse structure by business logic expects
callback(formattedData)
}
在我的测试文件中,我可以轻松地模拟这个调用:
import { getUser } from "./UserAPI"
jest.mock("./UserAPI", () => ({
getUser: (uid: String, callback: (GetUserResponse) => void) => {
const mockedUserData = require("./mockUser.json")
// But how do I format it here?
return formattedMockedUserData
},
}))
我可以在我的UserAPI.ts
文件中创建一个格式化程序函数,将其导出,然后在开玩笑的模拟中运行它,但我想知道这是否是最佳实践,因为它在技术上泄露了UserAPI
实现细节。我指出这一点只是因为没有其他文件关心UserAPI
除UserAPI
. 如果我必须出于测试目的泄漏它,我会这样做。但是有没有更好的方法来模拟网络调用并通过格式化程序运行它而不暴露额外的实现细节?
请对我的打字稿温柔一点——我来自 JS 和强类型背景,但这是我第一次尝试使用打字稿 :)
解决方案
即使它没有在多个地方使用,也可以按照单一责任原则将其提取到自己的结构中。您在 Formmater 测试中测试所有格式化逻辑,而不是在用户 API 测试中。此外,您可以在集成测试中测试 Formatter 与用户 API 的集成。
推荐阅读
- html - 在 PC 和移动视图中将背景图像的高度调整为 DIV
- java - 无法从 START_OBJECT 令牌中反序列化 PaymentResponse[] 的实例
- android-studio - 无法启动安卓模拟器
- java - 如何在 Java 11 中使用没有 JRE 的 JDK
- python - 如何在python中比较表情符号
- php - 基于对象属性将对象数组拆分为PHP中的新数组
- javascript - 为什么在这种特殊情况下事件处理程序不起作用?
- android - 从 FireBase 中检索数据并在单击按钮时一一显示 CardView
- twitter-bootstrap - 引导程序的哪些文件应该在索引文件中
- c# - C#用单引号替换双引号