2013-08-12 12 views
5

Używam laika do testowania i pakietu meteor-router do routingu. Chcę wykonać testy, które przechodzą do jakiejś strony, wypełnić formularz, przesłać go i sprawdzić komunikat o powodzeniu, ale utknąłem w części nawigacyjnej. To była moja pierwsza próba:Jak przetestować router Meteor lub router Iron z 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(); 
    }); 
    }); 
}); 

to nie działa, ponieważ Meteor.Router.to nie posiada zwrotnego i nie wiem, jak wykonać następną linię, gdy nowa strona jest ładowana.

Próbowałem też coś takiego

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

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

ale mam błąd Error: Cannot find module 'webpage'

Edit

ruszam do iron router, więc każda odpowiedź z tym też będzie pomocny.

+1

FYI: Jeśli dopiero zaczynasz, możesz przełączyć na https://github.com/EventedMind/meteor-iron-router, który został stworzony przez autorów dwóch ostatnio używanych routerów meteorologicznych. –

Odpowiedz

0

Miałem ten sam problem. Musiałem przejść do jakiejś strony przed uruchomieniem testów. Używam również żelaznego routera. Pomyślałem, że nie można po prostu wykonać Router.go('foo') i to wszystko. Musisz poczekać, aż nastąpi faktyczne wyznaczenie trasy. Na szczęście router udostępnia metodę Router.current(), która jest reaktywnym źródłem danych, które zmieni się, gdy tylko strona będzie gotowa. Tak więc, aby przejść do konkretnej trasy przed uruchomieniem moich testów, najpierw uruchom następujący blok kodu:

// 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'); 
}); 

Ponieważ jest wewnątrz evalSync() wszystkiego, co następuje blok ten będzie wykonywany po routingu zakończeniu.
Mam nadzieję, że to pomoże.

0

Laika zawiera teraz funkcję waitForDOM(), którą można ustawić tak, aby oczekiwała na pojawienie się określonego elementu DOM, który w tym przypadku byłby elementem strony, którą ładujesz.

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

Pierwszy parametr to selektor jQuery.

Powiązane problemy