我试图使用RhinoUnit进行独立的,基于xul的JavaScript应用程序的单元测试。我已经成功地改变了很多路径在给定的build.xml
-主要改变路径到RhinoUnit脚本,我更喜欢放在另一个目录比默认的(也就是说,我把RhinoUnit文件在chrome/content/rhino
和JSLint文件在chrome/content/lint
)。然而,在某个时刻,我得到了这个错误:
/<project-path>/build.xml:52: javax.script.ScriptException:
sun.org.mozilla.javascript.internal.WrappedException: Wrapped
java.io.FileNotFoundException: /<project-path>/jslint/fulljslint.js
(No such file or directory) (<Unknown source>#31) in <Unknown source>
at line number 31
在build.xml
中没有提到jslint/fulljslint.js
,但我在jslintant.js
中发现了这个代码:
var jsLintPath = "jslint/fulljslint.js";
if (attributes.get("jslintpath")) {
jsLintPath = attributes.get("jslintpath");
}
在我看来,这段代码为变量设置了默认值,然后尝试使用一些attributes
对象的值。我假设这些attributes
可以在脚本之外设置,例如通过一些<atttribute />
标记int build.xml
或一些配置文件。
我的问题是:我如何改变对象的值?这可能吗?或者我应该改变脚本中的硬编码字符串吗?
这是一个可以考虑的可能性。
如何弄清楚发生了什么:如果您在jslintant.js
文件中插入这个,就在您提到的jsLintPath分配之前:
echo = project.createTask( "echo" );
echo.setMessage( attributes );
echo.perform( );
然后运行RhinoUnit构建,您应该看到如下内容:
run-js-lint:
[echo] {options={eqeqeq : false, white: true, plusplus : false, bitwise : ... }}
如何做你想要的: 'options'被定义为jslintant
scriptdef的属性。要传播jslintpath的值,需要将其作为scriptdef中的属性添加,然后在使用这样定义的任务时设置它。例如:
<scriptdef name="jslintant"
src="jslint/jslintant.js"
language="javascript">
<attribute name="options" />
<attribute name="jslintpath" /> <!-- This line added. -->
<element name="fileset" type="fileset" />
</scriptdef>
则使用任务:
<jslintant options="{eqeqeq : false, ... }"
jslintpath="your_path_here/fulljslint.js" />
如果您重新运行构建,您应该看到:
run-js-lint:
[echo] {jslintpath=your_path_here/fulljslint.js, options={eqeqeq : false, ... }}
您选择的路径将用于查找fulljslint.js