Con*_*cek 3 javascript templates unit-testing jasmine meteor
我正在尝试在流星项目上运行Jasmine客户端集成测试.我正在使用meteor 0.9.4,以及sanjo:jasmineJasmine 的包.
我写了一个测试,看起来像:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
在它可以到达测试结束之前我得到一个错误:
Cannot read property 'tasks' of undefined
Run Code Online (Sandbox Code Playgroud)
这意味着Template.dashboard在本次测试的范围内不存在.
Template.dashboard.tasks()是一个完全有效的辅助函数,它js位于视图文件夹中的文件中.常规Jasmine测试按预期工作,但是一旦我尝试从另一个文件中使用我自己的一个函数,它就不起作用.
我的问题是:我是否需要做一些事情才能让Jasmine测试访问我的模板帮助函数?
在Meteor中,模板助手函数的格式如下:
Template.dashboard.tasks = function () {
...
};
Run Code Online (Sandbox Code Playgroud)
但这已被弃用,新格式为:
Template.dashboard.helpers({
tasks: function(){
...
}
});
Run Code Online (Sandbox Code Playgroud)
在Jasmine中,使用以前的格式,您可以访问辅助函数,如:
Template.dashboard.tasks();
Run Code Online (Sandbox Code Playgroud)
但是现在你必须调用这样的辅助函数:
Template.dashboard.__helpers[' tasks']();
Run Code Online (Sandbox Code Playgroud)
Sanjo(流星茉莉复制品的所有者)建议使用这样的函数来更容易调用辅助函数(特别是如果语法最终再次更改):
function callHelper(template, helperName, context, args) {
context = context || {};
args = args || [];
template.__helpers[' ' + helperName].apply(context, args);
}
Run Code Online (Sandbox Code Playgroud)