2015-02-11 58 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

相关问题