2017-04-11 171 views
0

使用Mocha進行測試時,如何加載foo.js以便foo-test.js可以測試諸如giveMeFive()之類的全局變量?如何用Mocha測試全局變量?

foo.js:

function giveMeFive() { 
    return 'High five!'); 
} 

FOO-test.js:

describe('#convertNumberToDollar()', function() { 
    it('should get a successful high five',() => { 
    assert.ok(giveMeFive() === 'High five!', ' successful high five.'); 
    }); 
}); 

這將是理想的,如果該解決方案可以通過竹被自動化。

+0

你在節點中運行摩卡嗎?在這種情況下,你可以使用'require'(或者如果你使用Babel則使用'import') –

+0

即使giveMeFive()是全局的嗎? –

+0

現在查看我的答案。 –

回答

0

您可以使用import * as thisNameDoesntMatter from 'foo'或使用es5樣式(在這種情況下更乾淨),require('foo'),並且該文件中定義的全局變量將在全局範圍內可用。

舉例來說,如果你定義以下JavaScript文件:

//test.js 

aGlobalVariable = 'someValue'; 

let aLocalVariable = 'anotherValue'; 

export default aLocalVariable; 

這是代碼巴貝爾將產生(使用es2015預設和"node"環境):

//test-compiled.js 
'use strict'; 

Object.defineProperty(exports, "__esModule", { 
    value: true 
}); 
global.aGlobalVariable = 'someValue'; 

var aLocalVariable = 'anotherValue'; 

exports.default = aLocalVariable; 

,你可以看,aGlobalVariable聲明保存在模塊中。由於整個編譯後的文件將在導入時進行評估,因此無論何時導入此模塊(如果選擇"browser"環境,它將在window上定義),全局範圍內都會提供aGlobalVariable。您不需要明確請求要導入的全局變量。

+0

嗨!感謝您的答覆。我的問題是如何用Mocha測試全局變量?我如何加載包含全局變量的foo.js?我使用的遺留代碼充滿了許多全局文件。 –

+0

您可以像加載導出模塊的文件一樣加載文件。如果文件包含全局變量,這些全局變量將像往常一樣在'global'(在Node中)或'window'(在瀏覽器中)對象上設置。我編輯了我的答案來解決這個問題。 –

+0

謝謝。我不知道導入*作爲解決方案。根據我的需要,這並沒有出於某種原因,但gulp-mocha-phantomjs幫助我在Node中運行我的Mocha html測試運行器。乾杯! –