【问题标题】:How to add global variables used by all tests in Javascript?如何在Javascript中添加所有测试使用的全局变量?
【发布时间】:2015-04-11 13:28:28
【问题描述】:

我找不到如何删除 Javascript 中的代码重复(基本上我会在 Java 中使用基类实现)。

具体示例(至少)是以下代码,它对所有规范文件(可能还有页面对象,因为我在量角器中使用该模式进行测试)都是通用的:

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

我可以做些什么来让 expect 随处可用吗? 我尝试在量角器配置中在规范之前加载一个文件:

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

或使用 beforeLaunchonPrepare (但想要一个函数,不知道如何以这种方式公开变量),但没有成功。

但是,对于这种代码重用,我更喜欢通用的 Javascript 方法。

有什么好的方法可以避免到处重复这种通用代码,尤其是在测试中(mocha、karma、protractor)?

【问题讨论】:

    标签: javascript testing code-reuse base-class code-duplication


    【解决方案1】:

    一种方法是将该代码放在单独的文件中:

    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;
    

    【讨论】:

    • 谢谢,如果最终我只需要期望,这很好,就像这里的情况一样。但是有没有办法导出多个变量,使一个文件真正暴露出其他人需要的许多模块?因为如果我为每个文件/模块做一个要求,我将获得很少的可重用性:)
    • @cowst 当然,只需导出和对象module.exports = {expect: expect, assert: assert}; 然后像这样要求var common = require('./common'); var expect common.expect; var assert = common.assert;
    • 好的,这种方式很方便将所有帮助库保存在一个地方,在上述情况下,我们使用 4 行来获取我们需要的 1 个 var。如果我们只直接声明每行需要 1 个 var,我们将使用它们重写文件中的每一行,因此我们不会保存代码,而是在任何地方多写一行(需求):DI 希望更方便,正在注入一个文件(以正确的方式编写)将为您提供 vars 的可见性。无论如何,请编辑您的答案,以便我可以根据我的需要将其标记为“我们能做的最好的”:)
    • 请编辑您的答案,以便我可以根据我的需要将其标记为“我们能做的最好的”:)
    • @cowst 我不认为有什么好办法。您可以使用 GLOBAL 对象,但这被认为是不好的做法。 stackoverflow.com/questions/5447771/node-js-global-variables
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2012-04-20
    • 2012-01-12
    • 2020-10-03
    相关资源
    最近更新 更多