2016-11-14 32 views
1

我使用Jasmine-Node来测试Javascript代码。如何在JavaScript中导出和导入两个不同的函数对象?

如何导出两个不同的函数对象,如Confusions1和Confusions2,以便两者都可以在Jasmine-Node测试文件中使用?

我的尝试是这样的:

// confusions.js 
var Confusions1 = function() {}; 

Confusions1.prototype.foo = function(num) { 
     // keep track of how many times `foo` is called 
     this.count++; 
} 

module.exports = Confusions1; 

// second function object 

var Confusions2 = function() {}; 

Confusions2.prototype.foo = function() { 
     var a = 2; 
     this.bar(); 
}; 

Confusions2.prototype.bar = function() { 
     return this.a; 
} 

module.exports = Confusions2; 

我的茉莉花测试文件:

// confusions.spec.js 

var Confusion = require('./confusions.js'); 

describe("chapter 1, common misconception ", function() { 
     describe("to assume `this` refers to the function itself: ", function() { 
       var confusion = new Confusion(); 

       // some test code omitted 


     }); 

     describe("to assume `this` refers to the function's scope", function() { 
       var confusion = new Confusion(); 

       // test code omitted 

     }); 
}); 

我想它,以便Confusions1和Confusions2从confusions.js都可用在两个嵌套的描述中块confusions.spec.js

我假设我必须以某种方式初始化不同的对象后需要文件var Confusion = require('./confusions.js'); 类似var confusion1 = new Confusions1(); var confusion2 = new Confusions2();但究竟如何(不分裂两个对象在两个单独的文件中)?

回答

1

所以,你想有一个行为像出口值的容器中的模块,换句话说,你要导出两个函数:

// foo.js 
var Confusion1 = function() {} 
var Confusion2 = function() {} 
... 
exports.Confusion1 = Confusion1 
exports.Confusion2 = Confusion2 

无论你需要这个模块,你可能需要这个东西,如:

// bar.test.js 
var confusions = require('path-to-the-foo-file') 
console.log(confusions.Confusion1) 
console.log(confusions.Confusion2) 

而且,因为它似乎你应该检查你使用的作品一般怎么模块系统,检查这个答案:module.exports vs exports in Node.js

+0

有没有一种方法可以快速TES你的代码没有茉莉节点样板吗?当我用你的方法调整我的测试时,我得到一个TypeError,因为Confusion1/Confusion2在测试中未定义... – StandardNerd

+0

节点样板是什么?没有任何关系到任何测试框架,它只是关于节点模块系统。从上面创建两个模块并运行'node bar.test.js' – Srle

相关问题