Meteor 如何测试流星路由器或铁路由器与莱卡

Meteor 如何测试流星路由器或铁路由器与莱卡,meteor,laika,Meteor,Laika,我使用laika进行测试,使用包进行路由。我想做一些测试,导航到某个页面,填写表单,提交表单,并检查是否有成功消息,但我被困在导航部分。这是我第一次尝试: var assert = require('assert'); suite('Router', function() { test('navigate', function(done, server, client) { client.eval(function() { Meteor.Router.to('test'

我使用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();
    });
  });
});
这不起作用,因为
Meteor.Router.to
没有回调,我不知道在加载新页面时如何执行下一行

我也试过这样的东西

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

page.open('http://localhost:3000/test', function () { 
  ... 
}
但是我得到了错误
错误:找不到模块“网页”

编辑


我要搬到,所以任何与此相关的答案都会有帮助。

我也有同样的问题。在运行测试之前,我需要导航到某个页面。我也在用铁路由器。我想你不能只执行
Router.go('foo')
,就是这样。您需要等待,直到实际的路由发生。幸运的是,路由器公开了一个方法
router.current()
,它是一个反应式数据源,在页面准备就绪后将立即更改。因此,为了在运行测试之前导航到特定路径,我首先运行以下代码块:

// 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');
});
由于这是在
evalSync()中,因此该块后面的所有内容都将在路由完成后执行。

希望这能有所帮助。

Laika现在包含了一个
waitForDOM()
函数,您可以设置该函数以等待特定的DOM元素出现,在本例中,它将是您正在加载的页面中的一个元素

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

第一个参数是jQuery选择器。

FYI:如果您刚刚开始,您可能希望切换到,这是由最近两个广泛使用的meteor路由器的作者制作的。