2013-08-12 21 views
5

Test için laika kullanıyorum ve yönlendirme için meteor-router paketini kullanıyorum. Bir sayfaya gitmek, formu doldurmak, göndermek ve başarı mesajını kontrol etmek için testler yapmak istiyorum, ancak navigasyon bölümünde takılıyorum. Bu benim ilk girişimdi:Meteor yönlendirici veya demir yönlendiriciyi laika ile test etme

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(); 
    }); 
    }); 
}); 

Meteor.Router.to bir geri arama yok ve ben yeni sayfa yüklendiğinde sonraki satırı yürütmeye bilmiyorum çünkü bu çalışmıyor.

Bu

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

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

gibi bir şeyle de denedim ama

Ben iron router geçiyorum Düzenleme hata Error: Cannot find module 'webpage'

var, bu yüzden bu konuda herhangi bir cevap da olacaktır faydalı.

+1

FYI: Yeni başlıyorsanız, son iki yaygın meteor yönlendiricinin yazarları tarafından yapılan https://github.com/EventedMind/meteor-iron-router adresine geçiş yapmak isteyebilirsiniz. –

cevap

0

Aynı problem vardı. Testlerimi yapmadan önce bir sayfaya gitmem gerekiyordu. Demir yönlendirici de kullanıyorum. Sadece Router.go('foo')'u uygulayamayacağınızı düşündüm ve işte bu kadar. Asıl yönlendirme gerçekleşene kadar beklemeniz gerekir. Neyse ki yönlendirici, sayfanız hazır olur olmaz değişecek reaktif bir veri kaynağı olan Router.current() yöntemini ortaya çıkarır. Yani, benim testleri çalıştırmadan önce belirli bir rota gitmek için, ben öncelikle aşağıdaki kod bloğunu çalıştırın:

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

bu yönlendirme bittikten sonra bu blok çalıştırılacaktır izleyen bir evalSync() her şeyi içinde olduğundan.
Bu yardımcı olur umarım.

0

Laika, belirli bir DOM öğesinin görünmesini beklemek üzere ayarlayabileceğiniz bir waitForDOM() işlevini içerir; bu durumda, yüklediğiniz sayfada bir öğe olur.

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

İlk parametre bir jQuery seçicisidir.

İlgili konular