2017-08-14 4 views
6

Ich versuche gerade einen Abnahmetest für eine verschachtelte Route, die dieselbe Komponente zweimal verwendet, aber mit anderen Argumenten. Das funktioniert einwandfrei, wenn ich es normal ausführe, aber während ich den Akzeptanztest durchführe, bemerke ich, dass die Argumente der Komponente nicht aktualisiert werden, was dazu führt, dass mein Test fehlschlägt. Hier ist ein Code Beispiel:Ember.js: Komponentenattribut beim Test nicht zurückgesetzt

In index.hbs ich habe:

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

Meine index-view Komponente wie folgt aussieht:

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

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

von im listing-table auf ein Element klicken, dann gehe ich auf die locations.show Route, die eine link-to die locations.show.devices Route enthält. Die locations.show.devices Route enthält:

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

Doch meine Abnahmen, I (von Echo aus diesen Attributen in der Komponente Javascript) sehen kann, dass während model und type aktualisiert werden, wird exclude immer auf, was auch immer wurde eingestellt wenn die Komponente ursprünglich aufgerufen wurde.

Nun, ich habe überprüft (via console.log()), ob die Komponente wiederverwendet wird oder nicht, und ich konnte sehen, dass beide init() und didDestroyElement() werden zweimal genannt, was bedeutet, dass die Komponente zweimal über einen gesamten Lebenszyklus geht. Ich kann jedoch nicht wirklich verstehen, warum mein Argument exclude überhaupt nicht aktualisiert wird, und warum geschieht dies nur während des Abnahmetests?

This is a stripped down version of what I'm doing (natürlich funktioniert es auf Twiddle, aber nicht im wirklichen Leben!).

+0

Können Sie Ihre fragliche Komponente einfügen? Es klingt, als wäre etwas mit Ihrer spezifischen Komponente nicht in Ordnung ... – acorncom

+0

Nicht sicher, ob dies das Problem beheben wird, aber der Status kann geteilt werden, wenn Sie den Standardwert einer Eigenschaft auf ein Array oder Objekt setzen. Es sieht so aus, als würdest du sowohl das _ als auch _ die Standardeinstellungen in 'init()' zurücksetzen, also bin ich mir nicht sicher, ob das das Problem verursacht. Hier finden Sie weitere Informationen zum Freigabestatus: https://stackoverflow.com/a/19071065/916734 –

+0

@acorncorn: [hier] (https://gist.github.com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3) ist meine Komponente js. – finferflu

Antwort

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

geben Sie bestimmten Wert "locationName" (string) nicht .locationName der Komponente auf die Eigenschaft verknüpfen. (Ich bin über Angebote um locationName)

Sie wissen ja?

+0

Ja, es soll nur eine Zeichenfolge sein. In meiner Komponente (siehe [hier] (https: //gist.github.com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3 # Datei-Auflistung-Tabelle-JS-L73)), dann transformiere ich diese Zeichenfolge in ein Array. – finferflu

+0

@finferflu Ich bin über Ihre Frage "während Modell und Typ aktualisiert werden, wird Ausschluss immer auf was auch immer festgelegt wurde festgelegt, als die Komponente ursprünglich aufgerufen wurde." –

+0

Ich bin mir nicht sicher, ob ich verstehe, was Sie meinen, aber das Argument 'exclude' soll eine Zeichenfolge und kein Objekt sein. – finferflu

Verwandte Themen