7

我正在制作一个小型测试框架,它使用 JavaScript 模块模式在 iOS 上进行 UI 自动化测试。但是,基于#import和扩展模块,我似乎得到了奇怪的结果。

我有一个名为的基本测试模块Tester-Module.js

(function() {
  var Tester = this.Tester = {};

  Tester.setUp = function() {
    UIALogger.logMessage('Regular SetUp()');
  }
}).call(this);

如果我在我的测试用例中导入这个模块,它工作正常。这是测试文件tester.jstester.js是我在 Instruments 中导入的文件):

#import "./Tester-Module.js"

// Prints 'Regular SetUp()'
Tester.setUp();

但是,如果我尝试Tester-Module.js在另一个模块文件中扩展模块,则无法引用 Tester 对象。Tester-Extension.js扩展了以下定义的 Tester 模块Tester-Module.js

#import "./Tester-Module.js"

// Outputs:
// Exception raised while running script:
// ReferenceError: Can't find variable: Tester\n
Tester.setUp = function() {
  UIALogger.logMessage('Overwritten SetUp()');
}

和更新的测试用例文件tester.js

#import "./Tester-Extension.js"

// Exception is thrown before this
Tester.setUp();

我希望相关的问题是:

  • 为什么我不能在里面引用Tester对象Tester-Extension.js,但是可以在里面tester.js

  • #import 宏在做什么?

4

1 回答 1

5

经过更多的搜索和测试,UI 自动化框架似乎#import不支持在每个模块文件中使用(类似于 Node.js 中的 require)。

解决方法是包含一个导入每个模块的头文件,然后在测试用例中导入它。使用上面的示例,头文件将如下所示:

// Tester-Header.js
#import "./Tester-Module.js"
#import "./Tester-Extension.js"

测试文件将简单地导入头文件,如下所示:

#import "./Tester-Header.js"

// Prints "Overwritten SetUp()"
Tester.setUp();

The Mother May UI BDD framework has a more extensive example of a header file and importing the header file into a test file. Disclosure: I wrote the framework and originally asked this question in order to make the framework more modular.

于 2011-11-05T15:44:34.643 回答