Meteor,调用Blaze.renderWithData不会触发onRendered钩子

时间:2015-08-15 05:48:54

标签: unit-testing meteor meteor-blaze

我正在写一个流星包,正在写一些单元测试。该软件包包含一些模板,因此我也想测试模板。该模板有一个onRendered钩子。在我的单元测试中,我调用函数Blaze.renderWithData来呈现我想要测试的模板。我希望这个函数调用onRendered钩子。但事实并非如此。

我用茉莉花进行单元测试。测试代码如下:

for i in [0...tests.length]
  oneGroupTests = tests[i]
  describe  oneGroupTests.name, ->
    for i in [0...oneGroupTests.tests.length]
      test = oneGroupTests.tests[i]
      do (test) ->
        it test.name, ->
          expect(test.template).toBeDefined()
          expect(test.test).toBeDefined()
          div = document.createElement("div")
          Blaze.renderWithData(Template[test.template], test.data, div)
          if test.before
            test.before($(div))
          test.test($(div))
          $(div).remove()

知道如何以编程方式调用onRendered钩子吗?

感谢。

1 个答案:

答案 0 :(得分:0)

如果您的Tracker.flush()例程被解雇,请在测试前尝试调用onRendered。在这里查看更多详细信息:

http://docs.meteor.com/#/full/tracker_flush

您遇到此问题的原因可能是回调不是立即触发,而是仅在下一次"计算"周期。

http://docs.meteor.com/#/full/tracker_computation

调用Tracker.flush()将强制Meteor重新计算所有待处理的计算。