Meteor 如何测试流星路由器或铁路由器与莱卡
我使用laika进行测试,使用包进行路由。我想做一些测试,导航到某个页面,填写表单,提交表单,并检查是否有成功消息,但我被困在导航部分。这是我第一次尝试: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'
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路由器的作者制作的。