Mocha.js 在mocha中描述的循环基于在before块中的设置

Mocha.js 在mocha中描述的循环基于在before块中的设置,mocha.js,Mocha.js,我试图从google spread中的决策表动态创建测试,如下所示: describe "Dynamic test", -> rules = [1] # add a dummy element to see something in logs before (done) -> Tabletop.init( key: 'the google spreadsheet key' callback: (data,

我试图从google spread中的决策表动态创建测试,如下所示:

describe "Dynamic test", ->
    rules = [1] # add a dummy element to see something in logs
    before (done) ->
        Tabletop.init(
            key: 'the google spreadsheet key'
            callback: (data, tabletop) ->
                decisionTable = createTable(data)
                rules = extractRulesFromDesicionTable(decisionTable)
                console.log 'rules created'
                done()
            simpleSheet: true)


    for rule in rules
        do (rule) ->
            describe rule.name, ->
                console.log "describing rule"
                it 'should be nice', ->
                    true.should.be.ok
问题是,在创建
规则之前,
描述规则
会被记录下来

有没有办法完成我在这里要做的事情

问题是描述规则在创建规则之前就被记录下来了

是的,摩卡咖啡就是这样设计的。事件的顺序是:

  • 调用您的外部
    描述
    。它立即调用其匿名函数

  • 调用
  • 之前的
    。这将注册传递给它的回调,以便将来执行

  • 将执行规则中规则的
    循环

  • 在执行
  • 之前传递给
    的回调。请注意,此时调用
    description
    it
    已经太晚了。(摩卡咖啡可能会接受这些电话,在某些情况下,它可能会做你想做的事情,但实际上这是一种未定义的行为。如果它起作用,那就是运气。)

    一般规则是立即执行传递给
    descripe
    的回调。传递到钩子(
    之前
    之前
    ,等等)或测试(
    it
    )的回调将在稍后执行。(我有一份关于执行令细节的报告。)

    我看不到一个简单的解决方案,你想做什么。您正在尝试生成测试,这通常不是问题,只要它是同步完成的。(我已经做过很多次了,例如通过使用节点的同步
    fs
    调用来读取一组文件。)没有异步执行的规定。我想你必须这样做。

    谢谢!从它看来,您无法传递
    --compilers coffee:coffee script/register
    参数,所以我不敢使用它:)但是,首先构造一个
    rules.js
    文件,然后运行mocha同步读取该文件就像一个符咒:
    coffee./test/create-dynamic-rules.coffee--nodejs&./node_modules/.bin/mocha./test/dynamic-test.coffee--compilers coffee:coffee脚本/寄存器--15000超时