2015-08-21 7 views
9

Sto cercando di scrivere un test di integrazione dei componenti, alla this blog post, ma la mia componente ha un link-to ad un percorso dinamico e la proprietà href non viene riempita in Ecco una versione semplificata di ciò che sto cercando di fare.Ember Integration Component Test: `link-to` href vuoto

modello di mia componente:

{{#link-to "myModel" model}} 

E qui è la parte rilevante del mio test:

this.set('model', { 
    id: 'myId', 
    name: 'My Name' 
}); 

this.render(hbs` 
{{my-component model=model}} 
`); 

assert.equal(this.$('a').attr('href'), '/myModel/myId'); // fails 

Il link-to è resa, ma senza un attributo href. Se accedo il codice HTML nel test, sembra che:

<a id="ember283" class="ember-view">My Name</a> 

C'è qualcosa che devo fare per il mio "modello" per ottenere il link-to di avere un href? Ho provato a esaminare i test per link-to in inglese e ho trovato this part of the tests, che è fondamentalmente quello che sto facendo: fornire un POJO con il set di chiavi id. Qualche idea?

Edit:

DEBUG: ------------------------------- 
DEBUG: Ember  : 1.13.8 
DEBUG: Ember Data : 1.13.10 
DEBUG: jQuery  : 1.11.3 
DEBUG: ------------------------------- 
+0

E 'test di integrazione o di unit test? –

+0

@Daniel: test di integrazione –

risposta

11

Si scopre che è sufficiente cercare il router e dirgli di iniziare il routing nella configurazione di prova e funzionerà. Da this commit da @rwjblue:

// tests/helpers/setup-router.js 

export default function({ container }) { 
    const router = container.lookup('router:main'); 
    router.startRouting(true); 
} 


// tests/integration/components/my-component-test.js 

import { moduleForComponent, test } from 'ember-qunit'; 
import hbs from 'htmlbars-inline-precompile'; 
import setupRouter from '../../helpers/setup-router'; 

moduleForComponent('my-component', 'Integration | Component | my component', { 
    integration: true, 
    setup() { 
    setupRouter(this); 
    } 
}); 
+3

Grazie, ora potrei vedere 'href', ma un altro errore' TypeError: impossibile leggere la proprietà 'didCreateRootView' di undefined' impedisce al test di passare –

0

Quale versione di Ember stai usando? Ricordo di averlo visto in precedenza e ora sembra funzionare nella mia app (anche se sto usando 1.13.8).

Sembra aggiungere l'href nella mia applicazione e in base a this computed property deve essere associato alla vista se lo tagName è "a".

Oltre ad aggiornare Ember, è probabilmente meglio creare un ember-fiddle o una repro e presentare un bug se persiste.

Si potrebbe anche voler dare un'occhiata a https://github.com/intercom/ember-href-to.

+0

Ho aggiunto le informazioni sulla versione di Ember alla domanda (anche io sono su 1.13.8), e non ho problemi con l'aggiunta di 'href' nella mia applicazione - mancano solo nel test. –

1

Se si vuole solo controllare la href è ok, potrebbe essere un uso migliore setupRouter invece di startRouting. startRouting tenta di gestire la transizione iniziale all'URL iniziale e ciò potrebbe essere problematico.

// tests/helpers/setup-router.js 
export default function({ container }) { 
const router = container.lookup('router:main'); 
    router.setupRouter(); 
} 

https://github.com/emberjs/ember.js/blob/d487061228a966d8aac6fa94a8d69abfc3f1f257/packages/ember-routing/lib/system/router.js#L202