4

我正在尝试使用jasmine-node测试我的Meteor应用程序。我在帮助程序(spec_helper.js)中删除了 Meteor 框架的一些方法:

  var Meteor = {
    startup: function (newStartupFunction) {
        Meteor.startup = newStartupFunction;
    },
    Collection: function (collectionName) {
        Meteor.instantiationCounts[collectionName] = Meteor.instantiationCounts[collectionName] ?
            Meteor.instantiationCounts[collectionName] + 1 : 1;
    },
    instantiationCounts: {}
  };

此时我需要运行spec_helper.js中的代码(相当于包含其他语言的模块)。我尝试了以下方法,但没有成功:

require(['spec_helper'], function (helper) {
    console.log(helper); // undefined
    describe('Testing', function () {
        it('should test Meteor', function () {
            // that's what I want to call from my stubs... 
            // ...it's obviously undefined
            Meteor.startup();
        });
    });
});

任何帮助将不胜感激。

4

1 回答 1

9

jasmine_nodehelpers将从您的规范目录中自动加载帮助程序(任何包含单词的文件)。

注意:您可以作弊并改用helper它,因为它是helpers...的子字符串,如果您将助手拆分到多个文件中会更有意义...单数与复数。

如果您从 执行您的规范specs/unit,则创建一个名为 的文件specs/unit/meteor-helper.jsjasmine_node并将自动为您获取它。.js如果您的规范是用 vanilla JavaScript 编写的,它将加载带有扩展名的文件。如果你在命令行上或通过你的 grunt 任务配置传递--coffee开关(如果你有野心,你甚至可以使用 gulp),那么它将加载带有 extensions 的助手js|coffee|litcoffee

您应该从每个帮助文件中导出 a hash,如下所示:

specs/unit/meteor-helper.js

// file name must contain the word helper // x-helper is the convention I roll with module.exports = { key: 'value', Meteor: {} }

然后,jasmine_node每个键写入全局命名空间

这将允许您简单地键入keyMeteor从您的规范或任何被测系统(通常lib是规范正在执行断言的文件夹中的代码)。

此外,jasmine_node还允许您通过--nohelpers开关抑制加载帮助程序(有关更多详细信息,请参阅代码自述文件)。

这是通过节点处理茉莉花助手的正确方法。您可能会遇到一些引用jasmine.yml文件的答案/示例;或者甚至spec_helper.js。但请记住,这是针对红宝石地而不是节点的。

更新:它似乎jasmine-node只会在包含单词的情况下获取您的文件helpers。命名每个帮助文件x-helper.js|coffee|litcofee应该可以解决问题。即meteor-helper.coffee

于 2014-02-26T21:48:36.397 回答