2014-10-28 57 views
3

我正在尝试在流星项目上运行Jasmine客户端集成测试。我为Jasmine使用meteor 0.9.4sanjo:jasmine包。在Jasmine中访问流星模板帮助函数以进行集成测试

我写了一个测试,它看起来像:

describe("Template.dashboard.tasks", function() { 

    it("ela displays correct assessment", function() { 
     Session.set("selected_subject", "math"); 
     Session.set('selected_grade', "1"); 

     tasks = Template.dashboard.tasks(); 
     expect(true).toBe(true); 
    }); 
}); 

我得到一个错误,才可以获取到测试结束:

Cannot read property 'tasks' of undefined 

这意味着Template.dashboard内不存在这个测试的范围。

Template.dashboard.tasks()是一个辅助函数,它完全工作,它在一个视图文件夹中的js文件中。定期Jasmine测试按预期工作,但只要我尝试从另一个文件中使用我自己的功能之一,它不起作用。

我的问题是:有什么我需要做的,以Jasmine测试访问我的模板帮助函数?

回答

6

在流星中的模板辅助函数像这样被格式化:

Template.dashboard.tasks = function() { 
    ... 
}; 

但是已经被弃用,而新的格式是:

Template.dashboard.helpers({ 
    tasks: function(){ 
     ... 
    } 
}); 

在茉莉,与以前的格式,你可以一CCESS辅助功能,如:

Template.dashboard.tasks(); 

但现在你必须调用辅助函数是这样的:

Template.dashboard.__helpers[' tasks'](); 

Sanjo(该meteor-jasmine repo的所有者)使用这样的功能,使其更容易调用辅助函数建议(特别是如果语法结束再次变更):

function callHelper(template, helperName, context, args) { 
    context = context || {}; 
    args = args || []; 
    template.__helpers[' ' + helperName].apply(context, args); 
} 
0

服务器部件上的测试从开始就运行良好,并且为了在前端部件上运行测试确实还有一件事要做。我会尽力找到你的。

此外,考虑读取或再次读取来自于大博士的博客涉及到茉莉/流星著名的和明确的文章:Bullet-proof Meteor applications with Velocity, Unit Testing, Integration Testing and Jasmine

+0

我读过那篇文章 - 我学到了很多东西,但仍然无法通过测试。你说还有一件事要做,让客户端测试起作用,那会是什么? – 2014-11-03 14:26:12

2

这个问题已更新的答案流星1.3(对不起,我ü SE摩卡,但它并不影响答案):

Template.foo和Template.foo助手不会急于建立测试时,所以你需要导入foo.html然后foo.js

下面是一个例子:

import { Meteor } from 'meteor/meteor'; 
import { Template } from 'meteor/templating'; 
import { Foo } from '/collections/foo.js'; 
import { assert } from 'meteor/practicalmeteor:chai'; 
import './foo.html'; // now Template.foo is defined 
import './foo.js'; // now Template.foo.__helpers[' bar'] is defined 


describe('foo handlers',() => { 
    it("Should test bar",() => { 
     // don't forget the space, helper key is ' bar' not 'bar' 
     var bar = Template.foo.__helpers[' bar'].apply({foo:"bar"},3); 
     assert.Equal(bar,'bar'); 
    }); 
}); 

当然以前那样说,你一定要封装怪异Template.foo.__helpers[' bar'].apply(context,args)成漂亮的,干净的帮手。