【问题标题】:NodeJS function parameter checking with assertions使用断言检查 NodeJS 函数参数
【发布时间】:2015-01-29 14:29:11
【问题描述】:

NodeJS 的动态类型很有趣,除了给定一个函数外,我想在开发过程中得到一些反馈,无论我传递的内容是否真的会产生任何有意义的东西。

在 C# 中我会这样做:Debug.Assert(complexType.Title.length <= 10)(在发布模式下编译时不会包含此类语句)

我发现例如 Chai 可以做到这一点。然而,这是一个 BDD / TDD 框架,我计划将它放在生产代码中,而不是在测试中。

function doSomething(complexType) {
    expect(complexType.title).to.be.a('string');
}

我读到这可以用 Uglify 编译出来,以更密切地反映 Debug.Assert 的行为。

这是个好主意吗?还是 NodeJS 有“真实”的断言?

【问题讨论】:

  • 这也适用于单元测试。我想知道将这样的断言放在生产代码中是否是个好主意。
  • 这是一个在生产中使用assert的nodejs代码示例:github.com/joyent/node/blob/master/lib/_http_server.js#L150
  • 我认为这不是一个好主意:它会减慢您的代码速度,并且在开发过程中对其进行适当测试后,您应该合理地确定类型是正确的。如果你需要验证是另一种任务,它有不同的库
  • 是的,但是Uglify 应该能够解决这个问题...

标签: javascript node.js assertions


【解决方案1】:

您可以使用内置的assert 模板进行断言测试。 您还可以使用内置的arguments 对象来测试您收到的函数参数。这是一个例子:

var assert = require('assert');

var doSomething () {
 if (arguments.length > 0) { // And you might even not need the if clause here...
  assert.equal(typeof arguments[0], 'string');
 }
}

doSomething('This is my title');
doSomething(1); // This will trigger the assert

另外,您可以使用内置的 arguments 对象做更多的事情,但我猜 OP 更多的是关于断言功能。

【讨论】:

  • 您的意思可能是assert.equal 而不是assert.notEqual
猜你喜欢
  • 1970-01-01
  • 2022-07-18
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多