Как работает #import в iOS 'Automation UI? - PullRequest
7 голосов
/ 23 сентября 2011

Я делаю небольшую тестовую среду, которая использует шаблон модуля JavaScript для тестирования автоматизации пользовательского интерфейса на iOS. Тем не менее, я, кажется, получаю странные результаты на основе # import и расширенных модулей.

У меня есть базовый тестовый модуль под названием Tester-Module.js:

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

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

Если я импортирую этот модуль в моем тестовом примере, он работает нормально. Вот тестовый файл tester.js (tester.js - это файл, который я импортирую в Instruments):

#import "./Tester-Module.js"

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

Однако, если я пытаюсь расширить модуль Tester-Module.js в другом файле модуля, я не могу ссылаться на объект Tester. Tester-Extension.js расширяет модуль тестера, определенный в 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-Extension.js, но могу в tester.js?

  • Что делает макрос #import?

1 Ответ

5 голосов
/ 05 ноября 2011

После дополнительного поиска и тестирования похоже, что использование #import в каждом файле модуля - аналогично требованию в Node.js - не поддерживается в инфраструктуре автоматизации пользовательского интерфейса.

Обходной путь заключается ввключите заголовочный файл, который импортирует каждый модуль, а затем просто импортируйте его в тестовом примере.Используя приведенный выше пример, файл заголовка будет выглядеть следующим образом:

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

А тестовый файл будет просто импортировать файл заголовка следующим образом:

#import "./Tester-Header.js"

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

Пользовательский интерфейс Mother May BDD Framework имеет более обширный пример заголовочного файла и импорта заголовочного файла в тестовый файл .Раскрытие: я написал фреймворк и первоначально задал этот вопрос, чтобы сделать фреймворк более модульным.

...