7

iOS での UI オートメーション テスト用の JavaScript モジュール パターンを使用する小さなテスト フレームワークを作成しています。ただし、 #importとモジュールの拡張に基づいて奇妙な結果が得られているようです。

私はと呼ばれる基本テストモジュールを持っていますTester-Module.js:

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

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

このモジュールをテスト ケースにインポートすると、問題なく動作します。テストファイルは次のとおりですtester.jstester.jsInstrumentsにインポートしたファイルです):

#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

さらに検索とテストを行った結果、#import各モジュール ファイルでの使用 (Node.js での require と同様) は、UI オートメーション フレームワークではサポートされていないようです。

回避策は、すべてのモジュールをインポートするヘッダー ファイルをインクルードし、それをテスト ケースにインポートすることです。上記の例を使用すると、ヘッダー ファイルは次のようになります。

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

テスト ファイルは、次のようにヘッダー ファイルをインポートするだけです。

#import "./Tester-Header.js"

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

Mother May UI BDD フレームワークには、ヘッダー ファイルのより広範な例と、ヘッダー ファイルをテスト ファイルにインポートする例があります。開示:私はフレームワークを書き、フレームワークをよりモジュール化するために最初にこの質問をしました。

于 2011-11-05T15:44:34.643 に答える