4

从 1.3.4 升级到版本 1.3.5 后,引用未定义的变量会导致测试失败。任何建议如何禁用此行为?我认为它与 js 严格模式有关,它默认启用此功能,但无法找到禁用它的方法

JsTestDriver.conf 文件的一部分:

load:
  - program.js
  - dialog.js

程序.js:

Program = {};

对话框.js:

Program.Dialog = {};

错误信息:ReferenceError: Program is not defined

4

2 回答 2

0

您现在可能正在使用不同的浏览器进行捕获(或不同的浏览器设置,如在 IE 或严格模式下打开的控制台),现在抛出不同的异常,或者您的代码库可能从那时起发生了变化。

JsTestDriver 没有改变 1.3.5 的已定义/未定义变量处理的行为,因为它只是捕获浏览器的异常。

无论如何,jsTestDriver 不会导致测试失败,但会在引用未定义的变量时导致测试错误。

例如,对于代码库中的这段代码(假设undef是一个未定义的变量):

if(undef) alert("foo");

从命令行运行测试时的 jsTestdriver 输出为:

Total 2 tests (Passed: 1; Fails: 0; Errors: 1) (1,00 ms)
  Chrome 23.0.1271.64 Windows: Run 2 tests (Passed: 1; Fails: 0; Errors 1) (1,00 ms)
    PersonTest.testWhoAreYou error (0,00 ms): ReferenceError: undef is not defined

如您所见,测试套件中有 1 个错误,但有0 个失败

编辑:对于您的情况,jsTestDriver 可能会在您的名称空间定义周围添加一个闭包。尝试这个

代替:

var Program = {};

利用:

window.Program = {};

因为Program.Dialog你不应该改变任何东西

请尝试以了解是否是原因。

于 2012-11-24T21:05:49.297 回答
-1

最佳实践是定义您自己的 undefined ( jstestdriver.util.undefine;),或使用void 0.

于 2012-11-18T11:41:56.590 回答