J'ai trouvé trois solutions différentes à ce problème, aucun d'entre eux agréable.
La Définition Des Dépendances Inline
define('hurp', [], function () {
return {
beans: 'Beans'
};
});
define('durp', [], function () {
return {
beans: 'durp beans'
};
});
require('hurpdhurp', function () {
// test hurpdurp in here
});
Fugly. Vous avez d'encombrer vos tests avec beaucoup de AMD passe-partout.
Le Chargement Se Moquer De Dépendances À Partir Des Chemins Différents
Cela implique l'utilisation d'une autre config.js fichier pour définir les chemins d'accès de tous les liens qui pointent vers se moque de la place de l'original dépendances. C'est aussi moche, nécessitant la création de tonnes de test de fichiers et les fichiers de configurations.
Faux Nœud
C'est ma solution actuelle, mais il est encore un des plus terribles.
Vous créez votre propre define
fonction de votre propre se moque du module et de mettre vos tests dans le rappel. Ensuite, vous eval
le module d'exécution de vos tests, comme suit:
var fs = require('fs')
, hurp = {
beans: 'BEANS'
}
, durp = {
beans: 'durp beans'
}
, hurpDurp = fs.readFileSync('path/to/hurpDurp', 'utf8');
;
function define(deps, cb) {
var TestableHurpDurp = cb(hurp, durp);
// now run tests below on TestableHurpDurp, which is using your
// passed-in mocks as dependencies.
}
// evaluate the AMD module, running your mocked define function and your tests.
eval(hurpDurp);
C'est ma solution préférée. Il semble un peu de la magie, mais il a quelques avantages.
- L'exécution de vos tests dans le nœud, donc pas de déconner avec le navigateur de l'automatisation.
- Moins besoin de désordre AMD réutilisable dans vos tests.
- Vous arrivez à utiliser
eval
dans la colère, et d'imaginer Crockford explose de rage.
Il y a encore quelques inconvénients, évidemment.
- Puisque vous êtes des tests dans le nœud, vous ne pouvez pas faire n'importe quoi avec le navigateur d'événements ou de manipulation du DOM. Seulement bon pour les tests de logique.
- Encore un peu maladroit. Vous devez simuler out
define
dans tous les tests, car c'est là que vos tests fait exécuter.
Je suis en train de travailler sur un lanceur de test afin de donner une plus belle syntaxe pour ce genre de choses, mais je n'ai toujours pas la bonne solution pour le problème 1.
Conclusion
Se moquant de deps dans requirejs suce dur. J'ai trouvé un moyen qui sortof fonctionne, mais je suis toujours pas très heureux avec elle. S'il vous plaît laissez-moi savoir si vous avez des meilleures idées.