2011-09-23 15 views
7

Realizzo un piccolo framework di test che utilizza il modello di modulo JavaScript per i test di automazione dell'interfaccia utente su iOS. Tuttavia, mi sembra di ottenere risultati strani basati su #import e sull'estensione dei moduli.Come funziona #import nell'automazione UI di iOS?

ho il modulo di test di base denominata Tester-Module.js:

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

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

Se importare questo modulo nel mio banco di prova, funziona benissimo. Ecco il file di prova tester.js (tester.js è il file importare in Instruments):

#import "./Tester-Module.js" 

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

Tuttavia, se cerco di estendere il modulo Tester-Module.js in un altro file del modulo, non riesco a fare riferimento all'oggetto Tester. Tester-Extension.js estende il modulo Tester definito 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()'); 
} 

e il file di test case aggiornato tester.js:

#import "./Tester-Extension.js" 

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

Le mie domande si spera correlati sono:

  • Perchè non posso fare riferimento al Tester object inside Tester-Extension.js, ma può in tester.js?

  • Che cosa fa la macro #import?

risposta

5

Dopo un po 'di ricerca e sperimentazione, sembra che con #import in ogni file del modulo - simile a richiedere in Node.js - non è supportato con il framework UI Automation.

La soluzione consiste nell'includere un file di intestazione che importa ogni modulo e quindi solo importarlo nel caso di test. Utilizzando l'esempio precedente, il file di intestazione sarà simile:

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

E il file di prova sarebbe semplicemente importare il file di intestazione in questo modo:

#import "./Tester-Header.js" 

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

Il BDD quadro Mother May UI ha un più ampio esempio di un header file e importazione del file di intestazione in un test file. Divulgazione: Ho scritto il framework e inizialmente ho posto questa domanda per rendere il framework più modulare.