2013-04-12 43 views
3

应该如何处理由should.js(或node.js)失败断言抛出的未捕获异常,并在断言失败的同一个函数/块上继续执行?如何处理should.js声明错误

我尝试在try/catch中包装断言,但它似乎仍然继续process.on('uncaughtexception')。

最后,在生产代码中使用断言来验证对象 属性是否是一种很好的做法和性能?

谢谢!

回答

0

正如documentation所述,Node的assert基本上是用于单元测试的。因此我不会在生产代码中使用它。我更喜欢单元测试,以确保在几种情况下断言是真实的。

但是,我认为你在这里使用了一个错误的方式断言:如果一个断言失败了某件事情是错误的。您的应用处于某种未知状态。

如果您对某些无效对象有某种处理方式assert不是正确的工具:据我了解您的用例,您并不真正需要一个对象是有效的,但如果它不是。这是一个简单的条件,而不是一个断言。

+0

谢谢,它是有道理的。我使用should.js来验证对象的原因是它具有相当的描述性,我可以从单元测试中重新使用代码。 – dublx

0

嗨@dublx我认为在生产代码中使用断言是完全有效的用例。例如。如果你依靠一个你知道以某种方式行事的外部API。这个API可能会突然改变并破坏你的代码。如果断言会检测到API发生了变化,并且您将得到一封自动电子邮件,那么即使您的客户不知道该中断,也可以对其进行修复。

这就是说我推荐assume.js,它解决了你的问题。即使表现也非常出色:一个断言只吃17μs或0.017ms。