2015-08-15 31 views
1

我在写一个流星包,并正在写一些单元测试。该软件包包含一些模板,所以我也想测试模板。该模板有一个onRendered钩子。在我的单元测试中,我调用函数Blaze.renderWithData来呈现我想测试的模板。我期望这个函数调用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钩子?

谢谢。

回答

0

尝试在测试之前调用Tracker.flush(),如果您的onRendered例程被解雇。在这里寻找更多详情:

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

您遇到这个问题的原因可能是回调不会立即解雇,但只有在未来的“计算”的怪圈。

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

调用Tracker.flush()将迫使流星重新计算所有未决计算。

+0

顺便说一下,这里是我们的小麻烦制造者:https://github.com/meteor/meteor/blob/devel/packages/blaze/view.js#L345 –

+0

谢谢。有用。 – Fei