2013-08-12 20 views
5

Sto usando laika per il test e il pacchetto meteor-router per il routing. Voglio fare test per navigare in qualche pagina, compilare un modulo, inviarlo e verificare la presenza di un messaggio di successo, ma sono bloccato sulla parte di navigazione. Questo era il mio primo tentativo:Come testare il router Meteor o Iron router con laika

var assert = require('assert'); 

suite('Router', function() { 
    test('navigate', function(done, server, client) { 
    client.eval(function() { 
     Meteor.Router.to('test'); 
     var title = $('h1').text(); 
     emit('title', title);   
    }) 
    .once('title', function(title) { 
     assert.equal(title, 'Test'); 
     done(); 
    }); 
    }); 
}); 

Questo non funziona perché Meteor.Router.to non hai richiamata e non so come eseguire la riga successiva quando la nuova pagina viene caricata.

ho provato anche con qualcosa di simile

var page = require('webpage').create(); 

page.open('http://localhost:3000/test', function() { 
    ... 
} 

ma ho ottenuto l'errore Error: Cannot find module 'webpage'

Modifica

mi sto muovendo a iron router, in modo che qualsiasi risposta con quella sarà anche utile.

+1

FYI: Se sei appena agli inizi, puoi passare a https://github.com/EventedMind/meteor-iron-router, che è stato creato dagli autori degli ultimi due router meteorici ampiamente utilizzati. –

risposta

0

Ho avuto lo stesso problema. Avevo bisogno di navigare in qualche pagina prima di eseguire i miei test. Sto usando anche il ferro da stiro. Ho pensato che non puoi semplicemente eseguire Router.go('foo') e il gioco è fatto. È necessario attendere fino a quando il routing effettivo ha avuto luogo. Fortunatamente il router espone un metodo Router.current() che è un'origine dati reattiva che cambierà non appena la pagina è pronta. Così, al fine di individuare un percorso specifico prima di eseguire le mie prove, ho innanzitutto eseguire il seguente blocco di codice:

// route to /some/path 
client.evalSync(function() { 
    // react on route change 
    Deps.autorun(function() { 
     if (Router.current().path == '/some/path') { 
      emit('return'); 
      this.stop(); 
     } 
    }); 
    Router.go('/some/path'); 
}); 

Dal momento che questo è all'interno di un evalSync() tutto ciò che segue questo blocco verrà eseguito dopo l'instradamento è terminato.
Spero che questo aiuti.

0

Laika ora include una funzione waitForDOM() che è possibile impostare per attendere la comparsa di un elemento DOM specifico, che in questo caso sarebbe un elemento nella pagina che si sta caricando.

client.eval(function() { 
    Router.go('test'); 
    waitForDOM('h1', function() { 
     var title = $('h1').text(); 
     emit('title', title); 
    }); 
}); 

Il primo parametro è un selettore jQuery.

Problemi correlati