2015-08-15 30 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