2016-09-11 59 views
1

我想測試我製作的原型函數。評估助手與測試文件是相同的上下文

我的設立由3個文件:

  • Base.js - 基本文件,所有我的第二個文件的共同點

    function prop(to, name, func) { 
        Object.defineProperty(to.prototype, name, { 
         value: func, 
         writable: true, 
         configurable: true 
        }); 
        return func; 
    } 
    
  • Array.js - 文件修改給定對象的原型。

    prop(Array, 'hasPresent', function(what) { 
        return !!~this.indexOf(what) 
    }); 
    
  • /tests/Array.js - 測試本身

    describe('hasPresent()',function(){ 
        it('number', function(done){ 
         expect([0,1,2].hasPresent(0)).toBe(true) 
         done() 
        }) 
    }) 
    

這一切是從做的NodeJS,即手錶文件更改。我擔心的是,它會從第二個文件(prop is not defined ... at Array.js:1)返回錯誤。這對我說,這些文件不在相同的上下文中進行評估。有什麼辦法可以做到這一點?或者當從節點啓動時,如何在測試文件中獲得__direcotory變量。

我的設置中的NodeJS:

jasmine.loadConfig({ 
    spec_files: ['Base.js','Array.js'] 
    helpers: ['Base.js','Array.js'] 
}) 

jasmine.execute(['tests/Array.js']); 

PS:我試圖把EVAL在tests/Array.js,但加載時的工作目錄遺忘,所以我將不得不使用絕對路徑,如果有什麼辦法解決這個問題,這將是偉大的。

回答

0

你只需要使用Node.js的正常模組機制:https://nodejs.org/api/modules.html

這裏是一個可以適應您的測試基本的例子:

foo.js的內容:

const circle = require('./circle.js'); 
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`); 

circle.js的內容:

const PI = Math.PI; 
exports.area = (r) => PI * r * r; 
exports.circumference = (r) => 2 * PI * r; 
+0

我明白了,這使得我模塊方式是一種方法,但我的庫僅包含原型,之後將文件發送給瀏覽器,所以我不想修改它們的節點。 – Akxe