2015-02-11 55 views
3

我找不到如何刪除Javascript中的代碼重複(基本上,我將在Java中使用基類實現)。如何在Javascript中添加所有測試使用的全局變量?

具體的例子是(至少)下面的代碼,這是通用於所有規格文件(和潛在的頁面對象,因爲我用量角器該模式測試):

var chai = require("chai"); 
var chaiAsPromised = require("chai-as-promised"); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 

我可以做東西有預計到處可用? 我在量角器配置試圖加載與文件的規格之前:

specs: [ 
    'e2e/helpers/commonDefinitions.js', 
    'e2e/**/*.spec.js' 
] 

或使用beforeLaunchonPrepare(但希望有一個功能,不知道如何公開瓦爾這種方式),但沒有成功。

但是,我更喜歡這種代碼重用的通用JavaScript方法。

有沒有什麼好的方法可以避免在任何地方重複這種常見的代碼,特別是在測試(摩卡,業力,量角器)?

回答

3

一種方法是將這些代碼在一個單獨的文件:

assert-styles.js

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 
var expect = chai.expect; 
var should = chai.should; 

module.exports = { 
    expect: expect, 
    should: should 
}; 

,然後將其導入到其他的測試文件:

test1.js

var assertStyles = require('./assert-styles'); 
var expect = assertStyles.expect; 
var should = assertStyles.should; 
+0

謝謝如果最終我只需要期待,這是好事,就像這裏的情況一樣。 但是有沒有辦法導出多個變量,使真正的文件暴露出其他人需要的許多模塊? 因爲如果我要求每個文件/模塊,我將獲得很少的可重用性:) – cowst 2015-02-11 12:43:11

+0

@cowst肯定,只是出口和對象'module.exports = {expect:expect,assert:assert};'然後要求像這樣,'var common = require('./ common'); var expect common.expect; var assert = common.assert;' – 2015-02-11 17:50:10

+0

好吧,這種方式可以方便地將所有幫助器庫保存在一個地方,並且在上述情況下,我們使用4行來獲取我們需要的1個變量。 如果我們只是直接聲明每行一個需要的變量,我們將使用它們來重寫這些文件中的每一行,所以不是保存代碼,而是在每個地方寫入一行(require):D 我希望得到更多方便的是,注入一個文件(用正確的方式書寫)會爲您提供已知的變量的可見性。 無論如何,請編輯您的答案,以便我可以將其標記爲「我們能做的最好的」以滿足我的需求:) – cowst 2015-02-12 07:36:19

相關問題