在我的Mocha测试中,我有以下coffeescript:
_u = require "underscore"
...
player._id.toString() in _u.map team._players, (player) ->
player._id.toString()
这编译为:
var _u,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
...
return _ref = player._id.toString(), __indexOf.call(_u.map(team._players, function(player) {
return player._id.toString();
}), _ref) >= 0;
首先,我根本不理解编译后的代码,它是coffeescript +下划线的工件,有没有办法重写我的代码以避免它?
然而问题是[].indexOf
似乎永远是真的,因此|| ...
永远不会触发,我在伊斯坦布尔代码覆盖率报告中得到了一个昙花一现。我也很乐意将其排除在伊斯坦布尔的ignore
陈述之外,但因为它已经生成,我无法定位它。
答案 0 :(得分:3)
使用underscore
并不重要。
a in b
编译为:
__indexOf.call(b, a) >= 0;
(在Coffeescript.org Try
屏幕中尝试此操作。)
Coffeescript定义(这是标准样板文件):
var __indexOf = [].indexOf || function(item) ...
通常这会为[].indexOf
提供数组的正常in
函数。但是一些旧的浏览器没有这种数组方法([].indexOf
是undefined
)。该表达式的function ...
部分通过数组上的循环完成相同的操作。
如果你不想要这块Coffeescript样板,请不要在&#39;中使用&#39;。例如使用:
b.indexOf(a)>=0
可能有一种纯粹使用underscore
的方法。