J'ai essayé de tester mon serveur de test à l'aide de mocha. C'est le code suivant que j'utilise, presque le même que celui trouvé dans un autre article similaire.
beforeEach(function(done) {
// Setup
console.log('test before function');
ws.on('open', function() {
console.log('worked...');
done();
});
ws.on('close', function() {
console.log('disconnected...');
});
});
afterEach(function(done) {
// Cleanup
if(readyState) {
console.log('disconnecting...');
ws.close();
} else {
// There will not be a connection unless you have done() in beforeEach, socket.on('connect'...)
console.log('no connection to break...');
}
done();
});
describe('WebSocket test', function() {
//assert.equal(response.result, null, 'Successful Authentification');
});
le problème est que lorsque j'exécute ce projet, aucun des fichiers console.log qui devraient être vus n'est visible sur l'invite de commande. Pouvez-vous m'expliquer ce que je fais mal?
Georgi a raison: vous avez besoin d'un appel it
pour spécifier un test, mais vous n'avez pas besoin d'avoir un niveau supérieur describe
dans votre fichier si vous ne le souhaitez pas. Vous pouvez remplacer votre single describe
par un tas d'appels it
:
it("first", function () {
// Whatever test.
});
it("second", function () {
// Whatever other test.
});
Cela fonctionne très bien si votre suite de tests est petite et composée d'un seul fichier.
Si votre suite de tests est plus grande ou répartie sur plusieurs fichiers, je voudrais très fortement vous suggérer de mettre votre beforeEach
et afterEach
avec votre it
à l'intérieur du describe
, sauf si vous êtes absolument certain que chaque test de la suite nécessite le travail effectué par beforeEach
ou afterEach
. (J'ai écrit plusieurs suites de tests avec Mocha et je n'ai jamais eu de beforeEach
ou afterEach
que je devais exécuter pour chaque test.) Quelque chose comme:
describe('WebSocket test', function() {
beforeEach(function(done) {
// ...
});
afterEach(function(done) {
// ...
});
it('response should be null', function() {
assert.equal(response.result, null, 'Successful Authentification');
});
});
Si vous ne placez pas votre beforeEach
et afterEach
dans describe
comme ceci, alors disons que vous avez un fichier pour tester les sockets web et un autre fichier pour tester certaines opérations de base de données. Les tests dans le fichier qui contient les tests de fonctionnement de la base de données auront également vos beforeEach
et afterEach
exécutés avant et après leur. Placer les beforeEach
et afterEach
à l'intérieur du describe
comme indiqué ci-dessus garantira qu'ils ne sont effectués que pour vos tests de socket Web.
Vous n'avez aucun test dans votre exemple. S'il n'y a aucun test à exécuter, les crochets avant et après ne seront pas appelés. Essayez d'ajouter un test comme:
describe('WebSocket test', function() {
it('should run test and invoke hooks', function(done) {
assert.equal(1,1);
done();
});
});
Vous devez avoir un test-callback (par exemple it
) à l'intérieur de la suite-callback (par exemple, describe
) pour exécuter beforeEach()
et afterEach()
hooks . Plus d'informations https://mochajs.org/#run-cycle-overview