2017-08-14 36 views
6

Obecnie próbuję testu akceptacji na trasie zagnieżdżonej, która korzysta z tego samego komponentu dwa razy, ale z różnymi argumentami. Działa to dobrze, gdy uruchamiam go normalnie, jednak po uruchomieniu testu akceptacji zauważam, że argumenty komponentu nie są aktualizowane, co powoduje, że mój test kończy się niepowodzeniem. Oto przykładowy kod:Ember.js: atrybut komponentu nie został zresetowany podczas testowania

W index.hbs mam:

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

Moja index-view komponent wygląda następująco:

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

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

Klikając na elemencie w listing-table, ja potem przejść do locations.show trasa, która zawiera trasę link-tolocations.show.devices. Trasa locations.show.devices zawiera:

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

Jednak w moich testów akceptacyjnych, widzę (przez echo z tych atrybutów w JavaScript komponentu), które podczas model i type aktualizowanych, exclude jest zawsze ustawiony na cokolwiek zostało ustawione kiedy składnik został pierwotnie wywołany.

Teraz mam zaznaczone (przez console.log()), czy składnik jest ponownie wykorzystywane, czy nie, i widziałem, że zarówno init() i didDestroyElement() nazywane są dwukrotnie, co oznacza, że ​​komponent przechodzi cały cykl życia dwa razy. Jednak nie mogę naprawdę zrozumieć, dlaczego mój argument exclude nie jest w ogóle aktualizowany i dlaczego tak się dzieje tylko podczas testów akceptacyjnych?

This is a stripped down version of what I'm doing (oczywiście działa na Twiddle, ale nie w prawdziwym życiu!).

+0

Czy można wkleić do danego komponentu? Wygląda na to, że coś jest nie tak ze swoim komponentem ... – acorncom

+0

Nie jestem pewien, czy to rozwiąże problem, ale stan można udostępnić, jeśli ustawisz domyślną właściwość tablicy lub obiektu. Wygląda na to, że robisz zarówno _ i resetowanie wartości domyślnych w 'init()', więc nie jestem pewien, czy to jest przyczyną problemu. Oto więcej informacji na temat udostępniania: https://stackoverflow.com/a/19071065/916734 –

+0

@acorncorn: [tutaj] (https://gist.github.com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3) to js mojego komponentu. – finferflu

Odpowiedz

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

przekazać pewną wartość "locationName" (string) nie Link do oferty .locationName składnika. (Jestem o cytatach około locationName)

Wiesz, tak?

+0

Tak, ma to być tylko ciąg znaków. W moim komponencie (zobacz [tutaj] (https: //gist.gitub.com/finferflu/f4832e7dd6e3bcc78bbe5a0abfd87ee3 # file-listing-table-js-L73)), następnie przekształcam ten ciąg w tablicę. – finferflu

+0

@finferflu Mam na myśli twoje pytanie "podczas gdy model i typ są aktualizowane, wykluczenie jest zawsze ustawione na to, co zostało ustawione, gdy początkowo komponent był wywoływany." –

+0

Nie jestem pewien, czy rozumiem, co masz na myśli, ale argument "exclude" ma być ciągiem znaków, a nie obiektem. – finferflu