我的配置是由grunt和以下实习配置(部分)启动的实习测试环境:
proxyPort: 9000,
proxyUrl: 'http://<my-ip>:9000',
问题是硬编码的my-ip。 Selenium网格和节点在不同的机器/相应的ips上运行,实习生的配置文件将与所有构建和测试环境一起检入。
如果我将proxyUrl留在localhost,那么selenium节点就无法加载实习测试的数据。
因此,对于所有开发人员测试,my-ip都会有所不同。我真的不希望每个人都把自己的ip输入到实习配置中,并且意外地检查配置,既不检查模板文件也不能让每个人都改变。
不要理解我的错。设置工作正常,但本地IP必须输入硬编码,我个人认为是气味。
也许很容易将proxyURL参数化,但我无法找到任何资源:(
问候,
Flowkap
答案 0 :(得分: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/
答案 1 :(得分:1)
我发现了如何通过使用node.net文档http://nodejs.org/api/os.html#os_os_networkinterfaces中描述的os.networkInterfaces()来轻松获取当前的LAN ip。{/ p>
因此,如果需要为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"]);
};
在我看来默认为本地局域网ip会是一个好主意,但如果您不能依赖localhost或0.0.0.0地址但不想手动编辑任何配置(或者不能因任何原因)。