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

Meteor, calling Blaze.renderWithData does not trigger onRendered hook

我正在写一个 meteor 包,并在上面写一些单元测试。该包包含一些模板,所以我也想测试这些模板。该模板有一个 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 挂钩吗?

谢谢。

在测试 onRendered 例程是否触发之前尝试调用 Tracker.flush()。在这里查看更多详细信息:

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

您遇到此问题的原因可能是回调没有立即触发,而是仅在下一个 "computation" 周期触发。

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

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