1

我的配置是由 grunt 和以下实习生配置(部分)启动的实习生测试环境:

proxyPort: 9000,
proxyUrl: 'http://<my-ip>:9000',

问题是硬编码的my-ip。Selenium 网格和节点在不同的机器/各自的 ips 上运行,实习生的配置文件将与所有构建和测试环境一起签入。

如果我将 proxyUrl 留在本地主机上,硒节点将无法加载实习生测试的数据。

因此,对于所有开发人员测试,my-ip 将有所不同。我真的不希望每个人都将自己的 ip 输入到实习生配置中并意外签入配置,也不希望签入模板文件以供所有人更改。

不要误会我的意思。设置工作得很好,但必须输入硬编码的本地 ip,我个人认为这是气味。

也许它很容易参数化proxyURL,但我找不到任何资源:(

问候,

流卡普

4

2 回答 2

1

从 Intern 1.6 开始,您可以从以下位置检索其他命令行参数intern.args

// in tests/config.js
define([ 'intern' ], function (intern) {
  return {
    proxyUrl: intern.args.proxyUrl,

    // ... additional configuration ...
  };
});
$ intern-runner config=tests/config proxyUrl=http://www.example.com:1234/
于 2014-04-13T18:30:48.823 回答
1

我发现了如何使用 os.networkInterfaces() 轻松获取当前 LAN ip,如 nodejs 文档http://nodejs.org/api/os.html#os_os_networkinterfaces中所述

因此,如果需要为 intern.js 的静态 proxyUrl 配置标志自动动态获取 localLan ip,我们只需在您的 Gruntfile 的定义中添加相应的代码,因为 Grunt 本身正在 nodejs 环境中执行:

/* jshint node: true*/
"use strict";
module.exports = function (grunt) {
    require("time-grunt")(grunt);

    var os = require('os');
    var interfaces = os.networkInterfaces(),
        localLanIp = null,
        setLocalLanIp = function (deviceDetails) {
            if (deviceDetails.family === 'IPv4' && !deviceDetails.internal) {
                localLanIp = deviceDetails.address;
            }
            return localLanIp !== null;
        };

    for (var device in interfaces) {
        //just check devices containing LAN or eth
        if (device.indexOf("LAN") > -1 || device.indexOf("eth") > -1) {
            //as we can'T break a forEach on arrays we use some and break on return true.
            interfaces[device].some(setLocalLanIp);
            //break outer for as loaclIp is found.
            if (localLanIp !== null) {
                break;
            }
        }
    }

    //if no ip found default to localhost anyway.
    if  (localLanIp === null) {
        localLanIp = "localhost";
    }

    grunt.initConfig({

        intern: {
            remote: {
                options: {
                    runType: "runner",
                    config: "tests/intern.js",
                    reporters: [ "console" ],
                    suites: [ "tests/module" ],
                    proxyPort: 9000,
                    proxyUrl: 'http://' + localLanIp + ':' + 9000
                }
            }
        }
    });
    grunt.loadNpmTasks("intern");
    grunt.registerTask("default", ["intern"]);
};

在我看来,默认为本地 LAN ip 是一个好主意,但如果您不能依赖 localhost 或 0.0.0.0 地址但不想手动编辑任何配置(或不能由于任何原因)。

于 2014-05-28T12:30:57.463 回答