2017-08-14 52 views
6

我目前正在嘗試對嵌套路由進行驗收測試,該測試使用相同的組件兩次,但使用不同的參數。這在我正常運行時工作正常,但是當我運行驗收測試時,我注意到組件的參數沒有被更新,這導致我的測試失敗。下面是一些示例代碼:Ember.js:組件屬性在測試時未復位

index.hbs我:

{{index-view model=model type='location'}} 

index-view組件看起來是這樣的:

<h1>{{title}} List</h1> 

{{listing-table model=model type=type}} 

通過點擊一個元素在listing-table,我然後去locations.show路由,其中​​包含link-to路由的locations.show.devices路由。該locations.show.devices路由包含:

{{listing-table model=model.devices type='device' exclude='locationName'}} 

然而,在我的驗收測試,我可以看到(呼應出器件的javascript這些屬性),雖然modeltype正在更新,exclude始終設置到任何設置當組件最初被調用時。現在

,我已檢查(通過console.log())的組件是否被重複使用或不,我可以看到,無論init()didDestroyElement()被調用兩次,這意味着該組件將經歷一個整個生命週期的兩倍。但是,我無法真正理解爲什麼我的exclude參數根本沒有被更新,爲什麼只有在驗收測試時纔會發生這種情況呢?

This is a stripped down version of what I'm doing(當然它適用於Twiddle,但不適用於現實生活!)。

+0

你能否粘貼有問題的組件?這聽起來像某些東西是與你的特定組件衝突... – acorncom

+0

不知道這是否會解決問題,但如果您將屬性的默認設置爲數組或對象,則狀態可以共享。看起來你正在做這兩件事,並且重置'init()'中的默認值,所以我不確定這是否是導致問題的原因。以下是有關共享狀態的更多信息:https://stackoverflow.com/a/19071065/916734 –

+0

@acorncorn:[here](https://gist.github.com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3)是我的組件的js。 – finferflu

回答

1
{{listing-table model=model.devices type='device' exclude='locationName'}} 

你通過一定的價值"locationName"(字符串)不鏈接到組件的屬性.locationName。 (我約在locationName左右的報價)

你知道,是嗎?

+0

是的,它只是一個字符串。在我的組件中(參見[here](https://gist.github。com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3#file-listing-table-js-L73)),然後將該字符串轉換爲數組。 – finferflu

+0

@finferflu我是關於你的問題',而模型和類型正在更新,排除總是設置爲最初調用組件時設置的任何值。 –

+0

我不知道我明白你的意思,但'exclude'參數應該是一個字符串而不是一個對象。 – finferflu