访问Jasmine中的流星模板助手功能以进行集成测试

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测试访问我的模板帮助函数?

Con*_*cek 6

在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)