考虑一个旧项目(在我看来很常见):
final Button[] btnTemp = new Button[answers.length];
final LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
gameL.addView(layout);
for(int i = 0; i < answers.length; i++) {
btnTemp[i] = new Button(getApplicationContext());
btnTemp[i].setText(answers[i]);
btnTemp[i].setTextColor(Color.parseColor("#ffffff"));
btnTemp[i].setTextSize(getResources().getDimension(R.dimen.fab_margin));
btnTemp[i].setPadding(0, 0, 0, 0);
btnParams.setMargins(0,0,0,0);
btnTemp[i].setBackgroundResource(R.drawable.round_shape_btn);
btnTemp[i].setId(listLast);
if(i != 2) {
final int finalI = i;
btnTemp[i].setLayoutParams(btnParams);
layout.addView(btnTemp[i]);
} else {
Timer f = new Timer();
final int finalI = i;
f.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(btnTemp[0].getWidth(),
1000);
params.gravity = Gravity.CENTER;
btnTemp[finalI].setLayoutParams(params);
gameL.addView(btnTemp[finalI]);
}
});
} }, 1000);
}
}
的index.html
static/
js/
file1.js
file2.js
....
index.html
file1.js:
...
<script type="text/javascript" src="js/file1.js"></script>
<script type="text/javascript" src="js/file2.js"></script>
...
file2.js:
// publicly exposed class/function
var Person = function(name, age) {
this.name = name;
this.age= age;
}
Person.prototype.getName = function() {
return this.name + '(' + this.age + ')'
}
file1.js和file2.js的内容只是用于显示问题的虚拟内容。
是否可以编写表单测试?:
file2.test.js:
// publicly exposed function
var createPerson = function(name) {
return new Person(name);
}
我尝试搜索将窗口/全局附加变量转换为模块导出的babel插件,同时尝试使用Jest&#39; setupFiles&#39;配置属性。 也许Jest不会为这种情况做准备,只是想不寻找另一个测试框架,因为我已经将Jest用于其他现代模块化应用程序。
如果不是如何测试这样的旧应用程序JavaScript - 我知道我可以使用Jasmine或Mocha并在浏览器中运行测试,但是希望在Node环境中进行测试,以便最终可以使用CI进行处理?
答案 0 :(得分:0)
您需要将文件范围合并为当前上下文的一部分-例如通过将源同步加载并危险地eval
到当前测试文件中-使以这种方式导入的任何内容都可以在那里进行测试(包括潜在的意外冲突和副作用),就像在非模块化全局窗口中那样上下文)。
const script = (url) => {
const { protocol } = new URL(url, 'file://');
switch (protocol) {
case 'file:':
return require('fs').readFileSync(`${process.cwd()}/${url}`, 'UTF8');
case 'http:':
case 'https:':
return String(require('child_process').execSync(`wget -O - -o /dev/null '${url}'`))
default:
throw new Error('unsupported protocol');
}
};
eval(script('js/file1.js'));
eval(script('js/file2.js'));
// ... tests