如何在Meteor中封装我想要进行单元测试的模块?

时间:2014-11-23 05:34:15

标签: javascript unit-testing meteor

我希望对我的Meteor应用程序进行单元测试。我有几个客户端文件,其中包含处理某些逻辑的函数,并由我的事件处理程序调用。我的直觉是将这些函数提取到一个模块中,该模块可以被我的事件处理代码所需和调用,并且单独进行单元测试,但我不确定如何在Meteor中执行此操作。

将我的逻辑代码拉入单独的文件/模块后,我获得其他文件的唯一成功就是将模块公开为全局变量。这在Meteor documentation中描述为变量的包范围。

让这个工作需要我关闭'use strict',而且通常只是感觉不对 - 我不需要包中的所有内容来查看此文件,只需一个地方它已被使用,还有一个单元测试。

我知道包是一种封装代码的方式,但对于这个用例来说似乎过于夸张了。

我在Meteor中进行了一些寻找更细粒度的依赖关系管理的工作,并找到了this one,作者明确表示不再维护它。

在Meteor中封装代码以供使用和单元测试的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

如果你在流星文件中

MyModule = {}

function cantSeeMe() {
}


MyModule.doesStuff =function() {

}

在测试中你可以访问它(以及流星中的其他文件)

   describe("Modules", function(){
      it("should be exposed", function(){        
        chai.assert.equal(typeof MyModule.doesStuff, 'function');
      });
      it("should not be exposed", function(){      
        chai.assert.equal(typeof cantSeeMe, 'undefined');
      });
    });

这是使用mike:mocha

基本上,全球并不是坏事。在像java / C#这样的传统语言中,类是全局变量,它们提供实例化对象的东西。在javascript中,您需要一些对象是全局的,它提供对函数或“类”的访问。通常,您不想做的是将函数或变量引入全局命名空间(或窗口),除非它们有充分的理由在那里。