【发布时间】:2015-03-14 16:44:18
【问题描述】:
我有一个带有一堆函数的对象,我想针对这些对象列表中的每个元素运行一些测试。所以我在这些对象方法中进行了测试,并希望在async.each 中运行它们。
尝试(CoffeeScript + Mocha)
{format} = require 'util'
async = require 'async'
class Foo
constructor: (@bar) ->
class Bar extends Foo
whoami_sync: => @bar
whoami_async: (cb) => cb null, @bar
objects = [{foo:'bar'}, {bar:'foo'}].map (obj) -> new Bar obj
describe 'something', ->
it "does't", (done) ->
async.each objects, ((item) ->
objects[objects.indexOf(item)].whoami_async), done
it 'does', (done) ->
res_list = [obj.whoami_sync() for obj in objects]
console.log format '[obj.whoami_sync() for obj in objects] = %j', res_list
done if res_list.filter((elem) -> !elem.length).length then new Error else null
错误输出(同步测试通过)
1) 有些东西没有: 错误:超过 2000 毫秒的超时
【问题讨论】:
-
不应该是
.map()而不是.forEach()? -
哎呀,是的。在这个简短的测试用例中重写了我更长的示例,一定忘记检查那行。
-
objects[objects.indexOf(item)]看起来写item的路很长。您应该调用whoami_sync方法,而不仅仅是引用它。普通方法应该用->创建,而不是=>。 -
嗯,第一个是对的。想知道我为什么要这样写? - 至于第二个,如果我需要访问
self,我不需要=>吗?
标签: javascript node.js coffeescript mocha.js async.js