【问题标题】:Is there a way to check that all function references are defined in JavaScript/Node Application?有没有办法检查 JavaScript/Node 应用程序中是否定义了所有函数引用?
【发布时间】:2020-11-17 00:44:14
【问题描述】:

我最近提取了一个名为 sendTextMessage 的函数,但没有将其修改为自己的模块,以便我可以在不同的位置重新使用它。我想知道之前的位置是否正确地引用了模块内的函数,但除了模拟一些系统函数和编写单元测试之外找不到简单的方法。

在编译语言中,“这个函数是否正确定义”的问题会很快得到回答,但在 JavaScript/Node 中,我假设您需要:

  1. 运行代码——工作量太大;我需要为要调用的特定路径设置一个完美的条件。
  2. 编写单元测试 — 是的,但我现在没有;有没有更简单的方法来实现我的目标?
  3. 等待指标——如果我破坏了某些东西,我会在指标中看到它,但这意味着我正在破坏生产
  4. ESLint? — 我可以通过 eslint 检查这种情况吗?
  5. 还有别的吗?

在下面的示例代码中,我刚刚从reminders.js 中提取了sendTextMessagetwilio.js,并希望确保在reminders.js 中正确定义了该函数。

定义模块(twilio.js):

const accountSid = '...';
const authToken = '...';
const twilio = require('twilio')(accountSid, authToken, {
  // US West Coast
  edge: 'umatilla',
});

async function sendTextMessage(message, recipientNumber) {
  return twilio.messages.create({
    from: '+...',
    body: message,
    to: recipientNumber,
  });
}

module.exports = {
  twilio,
  sendTextMessage, // Recently exported function!
};

消费模块(reminders.js):

const {
  sendTextMessage,
} = require('./deps/twilio');

...
// Question: was sendTextMessage correctly extracted out to twilio.js and does my code actually reference it here correctly? 
await sendTextMessage(reminderMessage, participantPhoneNumber);
... 

【问题讨论】:

    标签: javascript node.js eslint


    【解决方案1】:

    首先,打字稿的快速插件;您提到“编译语言不会遇到这个问题”,而 javascript 会。但是如果代码是一个打字稿项目,它可以按照你想要的方式进行检查。在下一个项目中记住这一点。或者您可以将打字稿检查应用于当前项目?

    这里有几个答案。

    一个——编写单元测试。如果你不能,那么这对代码库来说是个坏兆头。尽管如此,还是为自己编写测试。您必须学习如何模拟,然后您将学习如何编写更容易测试的代码。

    二——熟悉 javascript 语法。在某些时候,您需要能够排除此类错误的可能性。除非您的代码库覆盖 require,否则行为是完全可以预测的。

    我不认为 eslint 可以静态分析模块,尤其是当您使用 require 时。比我聪明的人可能会解释为什么;我不能。

    三个,也是最重要的——你的代码和产品之间没有中间地带吗?没有本地开发或暂存环境?那么,没有推送到 prod 就无法运行应用程序?在这种情况下,请继续冒险,然后冒险破坏产品;上级做出了错误的决定,需要学习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2021-12-21
      • 2013-01-15
      • 2014-12-22
      • 2011-08-15
      • 2023-03-04
      • 1970-01-01
      相关资源
      最近更新 更多