首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用laika测试流星路由器或铁路由器

如何用laika测试流星路由器或铁路由器
EN

Stack Overflow用户
提问于 2013-08-12 21:44:37
回答 2查看 500关注 0票数 5

我使用laika进行测试,使用流星路由器包进行路由。我想做一些测试,这些测试可以导航到某个页面,填写一个表单,提交它并检查是否有成功的消息,但是我仍然停留在导航部分。这是我第一次尝试:

代码语言:javascript
复制
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没有回调,而且我不知道在加载新页面时如何执行下一行。

我也试过这样的方法

代码语言:javascript
复制
var page = require('webpage').create();

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

但是我得到了错误Error: Cannot find module 'webpage'

编辑

我要搬到铁路由器,所以任何回答都是有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2014-01-30 08:57:51

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

代码语言:javascript
复制
// 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()中,所以这个块后面的所有内容都将在路由完成后执行。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2014-02-06 20:16:50

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

代码语言:javascript
复制
client.eval(function() {
    Router.go( 'test' );
    waitForDOM( 'h1', function() {
        var title = $('h1').text();
        emit( 'title', title ); 
    });
});

第一个参数是jQuery选择器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18197180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档