J'ai créé une simple webApp à l'aide de express.js et souhaitez le tester avec Jasmine-Node . Fonctionne bien jusqu'à présent, mais mon problème est que je dois démarrer le serveur manuellement à chaque fois avant que je puisse exécuter mes tests. P>
Pourriez-vous m'aider sur la façon d'écrire une aide spécifique qui exécute le serveur (avec un autre port puis mon développement) uniquement pour les tests, puis la tue ensuite après? P>
4 Réponses :
J'utilise moka - qui est déshabidé - mais le même principe devrait s'appliquer: vous pouvez essayer nécessiter code> votre
app.js code> fichier dans un crochet "avant" Le principal
décrit code>. Cela devrait le déclencher pour vous. P>
OK, alors il tire et les tests fonctionnent, mais cela ne s'arrête pas et échoue si j'utilise l'option --Autotest (ou que cela ne s'arrête pas si je veux seulement exécuter les tests une fois. En plus de cela, j'ai maintenant la sortie HTTP (GET / 200 6MS - 167) dans ma sortie de test. Comment puis-je me débarrasser de cela?
Avez-vous un exemple de cela?
Voici un exemple de sortie: Pastebin.com/9QF1Neu1 et ici du serveur_spec.coffee: pastebin.com/uvcbutiy
en supposant que vous utilisiez un code qui invoque Ensuite, vous pouvez les utiliser dans app.listen () code> dans serveur.js, ne nécessite pas le fichier sur chaque exécution, mais une seule fois, il y a deux fonctions comme
Av'enregistrer CODE> et
AFREEACH CODE> P> P>
Ne le fait pas de travailler, l'extrait de @shadowcloud est gentil :)
C'est ce que je fais:
J'ai un fichier le fichier donc le Les fichiers / dossier Structure de base seraient les suivants: p> /** my-test-task.js */
// util that spawns a child process
var spawn = require('child_process').spawn;
// reference to our node application server
var server = require('./path/to/server.js');
// starts the server
server.start( { port: 8000 }, function() {
// on server ready launch the jasmine-node process with your test file
var jasmineNode = spawn('jasmine-node', [ '.path/to/test/file.js' ]);
// logs process stdout/stderr to the console
function logToConsole(data) {
console.log(String(data));
}
jasmineNode.stdout.on('data', logToConsole);
jasmineNode.stderr.on('data', logToConsole);
jasmineNode.on('exit', function(exitCode) {
// when jasmine-node is done, shuts down the application server
server.close();
}
});
Ok je l'ai jusqu'à présent. Si vous me dites maintenant comment vous débarrasser de la sortie du serveur (comme: get / 200 46ms - 167 i>) dans mon test-sortie tout-authings bien :)
On dirait que vous avez quelque chose configuré dans votre application de serveur de nœud qui enregistre les demandes, un middleware du profileur pour Express peut-être? Vérifiez votre code de serveur Express;)
Désolé, j'ai trouvé une application oubliée.use (express.logger ('dev')); Merci ^^
Pas de soucis, cette production avait l'air assez familière; D
Je voudrais ajouter que serveur.close () code> peut échouer en raison d'un autre sous-système ne ferme pas. A conduit à moi des noix que le test de l'unité a déclenché la base de données, de sorte que le test de l'unité seul terminé, le serveur seul terminé, mais ensemble, car le test de l'unité a ouvert la base de données (ouais, je sais, maquette, ...) Le processus de serveur n'a pas été Terminez plus après la fermeture du serveur.
Si vous voulez ensuite aller un pas plus loin dans l'automatisation de vos tests pendant que vous développez, vous pouvez accéder à votre bornier et exécuter
jasmine-node . --autotest
Quelle version de Express utilisez-vous?
J'utilise la version 3.x (3.0.2 en ce moment).