8
votes

Automatiser jasmin-node et express.js

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.

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?


2 commentaires

Quelle version de Express utilisez-vous?


J'utilise la version 3.x (3.0.2 en ce moment).


4 Réponses :


0
votes

J'utilise moka - qui est déshabidé - mais le même principe devrait s'appliquer: vous pouvez essayer nécessiter votre app.js fichier dans un crochet "avant" Le principal décrit . Cela devrait le déclencher pour vous.


3 commentaires

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



0
votes

en supposant que vous utilisiez un code qui invoque app.listen () dans serveur.js, ne nécessite pas le fichier sur chaque exécution, mais une seule fois, il y a deux fonctions comme xxx < / Pré>

Ensuite, vous pouvez les utiliser dans Av'enregistrer et AFREEACH


1 commentaires

Ne le fait pas de travailler, l'extrait de @shadowcloud est gentil :)



17
votes

C'est ce que je fais:

J'ai un fichier Server.js strong> à l'intérieur de la racine de mon projet de nœud qui définit le serveur d'applications de nœud (avec Express) et exporte 2 méthodes: xxx pré>

le fichier app.js strud> sera simple à ce stade: p> xxx pré>

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();
    }
});


5 commentaires

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 ) 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 () 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.



-1
votes

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


0 commentaires