2011-09-23 12 views
7

Estoy haciendo un pequeño marco de prueba que usa el patrón de módulo de JavaScript para pruebas de automatización de UI en iOS. Sin embargo, parece que estoy obteniendo resultados extraños basados ​​en #import y extendiendo módulos.¿Cómo funciona #import en la Automatización de IU de iOS?

que tienen el módulo de prueba base llamada Tester-Module.js:

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

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

Si puedo importar este módulo en mi caso de prueba, funciona bien. Aquí está el archivo de prueba tester.js (tester.js es el archivo puedo importar en Instrumentos):

#import "./Tester-Module.js" 

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

Sin embargo, si intento de extender el módulo Tester-Module.js en otro archivo de módulo, no puedo hacer referencia al objeto probador. Tester-Extension.js extiende el módulo probador definido en 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()'); 
} 

y el archivo de caso de prueba actualizada tester.js:

#import "./Tester-Extension.js" 

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

Mis preguntas de esperar relacionados son:

  • ¿Por qué no puedo hacer referencia a la Probador objeto dentro de Tester-Extension.js, pero puede en tester.js?

  • ¿Qué hace #import macro?

Respuesta

5

Después de un poco más de búsqueda y pruebas, parece que el uso de #import en cada archivo de módulo - similar a requerir en Node.js - no es compatible con el marco de UI Automation.

El problema consiste en incluir un archivo de cabecera que importe cada módulo y luego importarlo en el caso de prueba. Utilizando el ejemplo anterior, el archivo de cabecera se vería así:

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

Y el archivo de prueba simplemente importar el archivo de cabecera de este modo:

#import "./Tester-Header.js" 

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

El marco BDD Mother May UI tiene una más amplia ejemplo de una header file e importar el archivo de encabezado a test file. Divulgación: escribí el marco y originalmente hice esta pregunta para hacer el marco más modular.

Cuestiones relacionadas