2012-12-30 2 views
2

service Eclipse Juno Release 1La syntaxe correcte pour la fonction setUp pour JSTestDriver

Exemple d'un test d'unité de travail ...

InRangeTest = TestCase("InRangeTest"); 

InRangeTest.prototype.test01 = function() 
{ 
    var ir = new InRange(0.0, "<", Number.MAX_VALUE, "≤"); 
    assertTrue(ir.isInRange(0.3)); 
}; 

Mais, faire plus d'un test, je crois que je devrais utiliser setUp . À moins que je me trompe, l'avantage de setUp est que je n'aurais pas à instancier var ir dans chaque test unitaire. Donc, j'ai essayé ce qui suit ...

InRangeTest = TestCase("InRangeTest"); 

InRangeTest.prototype.setUp = function() 
{ 
    var ir = new InRange(0.0, "<", Number.MAX_VALUE, "≤"); 
}; 

InRangeTest.prototype.test01 = function() 
{ 
    assertTrue(ir.isInRange(0.3)); 
}; 

Seulement, je reçois le message d'erreur

ReferenceError: ir is not defined

Remplacement var ir avec this.ir ne le faire fonctionner.

Qu'est-ce qui ne va pas?

Merci pour toute aide à l'avance.

Répondre

0

Si vous utilisez this.ir dans les deux fonctions, il devrait fonctionner:

InRangeTest = TestCase("InRangeTest"); 

InRangeTest.prototype.setUp = function() 
{ 
    this.ir = new InRange(0.0, "<", Number.MAX_VALUE, "≤"); 
}; 

InRangeTest.prototype.test01 = function() 
{ 
    assertTrue(this.ir.isInRange(0.3)); 
}; 
+0

Classé. Merci. Le sous-texte à la question est moi essayant de se familiariser avec la portée et la visibilité en Javascript. Si je comprends bien, le mot-clé "this" lie l'objet "ir" au constructeur d'objet "InRangeTest", c'est pourquoi il était nécessaire pour les tests unitaires de voir l'objet "ir". Sinon, l'objet "ir" ne serait visible que dans son objet parent, qui, dans ce cas, est le test unitaire et non le parent de tous les tests unitaires dans InRangeTest. (Désolé si ma terminologie est mélangée). – Extermiknit

+0

Il peut être déroutant, en particulier venant d'autres langues. Dans JS, il n'y a que la portée de la fonction. Donc, si vous définissez 'var x;', il ne sera visible que dans cette fonction. Si vous accédez à une variable, JS remontera toutes les étendues de fonction jusqu'à atteindre la portée globale (fenêtre), recherchant cette variable. Dans votre exemple initial, il cherchera 'ir' défini sur la fenêtre et ne le trouvera pas. 'setUp' et' test01' seront appelés en tant que méthodes sur l'objet TestCase, et ont donc 'this' lié à cet objet. Voilà comment vous pouvez partager les valeurs. Voir aussi http://stackoverflow.com/questions/500431 – meyertee

Questions connexes