【发布时间】:2013-09-13 18:32:45
【问题描述】:
发生了一些奇怪的事情。我刚刚升级到节点 v0.10.18。我的一个测试在一个意想不到的地方失败了。看起来我不能再做没有大括号的 if 语句了。
if(false)
console.log('shouldn't be printed');
在上面的示例中,即使 if 语句失败,也会打印文本。但未在以下测试中打印;
if(false) {
console.log('shouldn't be printed');
}
if(false) console.log('shouldn't be printed');
我有什么遗漏吗,node 一直都是这样吗?
编辑:我刚刚注意到只有在使用 mocha 时才会发生这种情况。代码在节点中运行正常。任何想法如何使用 mocha 发生这种情况?
EDIT2:感谢各位的回答,我的示例很简单,实际上 mocha 会深入到我目录中的文件中,但是当我使用 node-inspector 单步执行代码时,我看到了即使那些 if 语句的计算结果为 false,它也会进入下一行并执行回调行,这会中断我的调用。我无法在其他任何地方重新创建它,但我对它是如何发生的感到目瞪口呆
EDIT3:好的,伙计们,除了告诉你我看到它发生在哪里之外,我无法重现这个问题。我只是想在这里为一个开源项目做贡献https://github.com/jugglingdb/mysql-adapter 在 lib/mysql 的最后几行(大约 10 行左右)(下面链接),它检查 filter.where 和 filter.update,这就是问题发生的地方。如果我添加大括号,测试将通过,如果不添加则不会
https://github.com/jugglingdb/mysql-adapter/blob/master/lib/mysql.js 890 行在这里
测试它在哪里执行: https://github.com/jugglingdb/mysql-adapter/blob/master/test/migration.test.js 第 291 行 .. 它不存在,但检查 err 将返回第 890 行抛出的错误
【问题讨论】:
-
我认为你的例子是错误的。
-
我建议您始终使用
{}和if语句,但这只是我。 -
只有在
if(false)后面有分号时才会发生这种情况。你确定这是你的确切代码? -
显示准确的代码。你的例子没有问题。
-
如果这种情况只发生在 mocha 上,那么 mocha 就是 broka。
标签: javascript node.js mocha.js