2016-11-14 30 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

相關問題