2012-01-09 24 views
8

我們最近開始在我們的茉莉花規格中使用未公開的Ember.testing標誌,該標誌有效地禁用了自動運行循環功能。我們發現這需要我們更加明確地關於在runloops中手動包裝代碼,但也給了我們更多的規範穩定性,因爲它突出了我們編寫規範的方式中的問題,並有助於在綁定時記錄文檔對於被測試的代碼來說很重要。是否建議在單元測試中設置Ember.testing = true?

使用此功能是否有官方線路?它似乎對我們的應用產生了相當積極的影響,但我懷疑大多數人都沒有意識到這一點。

回答

-1

我從未使用Ember.testing標誌。我很想知道如何使它在您的規格中更加穩定。我一直在Jasmine測試Ember應用程序,沒有任何問題。

我必須在Ember測試套件的使用Ember.run()Ember.run.sync()之後取得成功。

+1

穩定性似乎主要來自開發人員被迫考慮運行循環,它與正在運行的代碼之間的關係以及該代碼的斷言。大量的Ember內部依賴於當前的運行循環,或者因爲沒有自動運行循環而拋出異常,所以很容易看到規範應該將應用程序代碼打包到哪裏。 – 2012-01-18 02:56:44

+2

由於規格有時會在我認爲應該一直失敗的地方傳遞,因此我們出現了一些間歇性故障。設置Ember.testing = true確保這些規格總是失敗。 – 2012-01-18 03:04:23

7

是的,您應該在您的測試中確定設置Ember.testing = true

如果沒有Ember.testing,則自動調度運行迴路,其中setTimeout是您注意到的不穩定性來自的地方。

注:目前,當你激活Ember.testing,你一定最終前綴許多與Em.run =>測試代碼行的,就像

Em.run => obj.set('someProperty', true) 

如果你忘了,它會大聲抱怨,或當您嘗試對它運行斷言時,屬性/應用程序狀態不會更新。

也許這會在某一天得到改善,但現在沒有什麼值得擔憂的,如果你的測試代碼被撥打run電話。