web-dev-qa-db-fra.com

Utilisez jasmine pour tester Express.js

J'apprends Node.js et le framework Express. Je suis un grand fan de jasmin. Donc, je veux utiliser du jasmin chaque fois que je peux, cependant, je ne trouve pas un bon moyen de tester Express avec jasmine. Par exemple, comment devrais-je tester un itinéraire dans app.js?

Si j'ai cette route dans app.js:

app.get('/', function(req, res) {
  ...
});

Comment puis-je utiliser du jasmin pour le tester?

19
user2730490

Jasmine-node facilite l'utilisation de jasmine avec node.js. Il y a quelques exemples sur leur site. Un autre exemple peut être trouvé de http://blog.drewolson.org/post/14684497867/ web.archive.org

7
Matti Lehtinen

Vous devriez essayer http://frisbyjs.com/

Je n'ai pas eu l'occasion de l'utiliser, mais comme je cherchais une solution au même problème, c'était le meilleur que je pouvais trouver.

4
rowanu

Depuis Jasmine 2, il est très simple d’utiliser Jasmine dans un environnement Node.js. Pour tester les applications express , il est recommandé d’utiliser Jasmine en combinaison avec supertest .

Voici à quoi ressemble un tel test:

projet/spec/ServerSpec.json

const request = require('supertest');
const app = require('../app');

describe('Server', () => {
  describe('REST API v1', () => {
    it('returns a JSON payload', (done) => {
      request(app)
        .get('/rest/service/v1/categories')
        .expect(200)
        .expect('Content-Type', 'application/json; charset=utf-8')
        .end((error) => (error) ? done.fail(error) : done());
    });
  });
});

Quelques prérequis:

  1. Installez Jasmine v2 en tant que dépendance de dev dans votre projet: npm i -D jasmine@2
  2. Installez Supertest v3 en tant que dépendance de dev dans votre projet: npm i -D supertest@3
  3. Créez une configuration initiale de Jasmine à l'aide de jasmine init (Remarque: vous devez d'abord installer Jasmine globalement si vous n'avez pas encore exécuté cette commande.)
  4. Créez une spécification se terminant par "Spec.js" (comme ServerSpec.js)

Voici à quoi ressemble une configuration Jasmine:

projet/spec/support/jasmine.json

{
  "helpers": [
    "helpers/**/*.js"
  ],
  "random": false,
  "spec_dir": "spec",
  "spec_files": [
    "**/*[sS]pec.js"
  ],
  "stopSpecOnExpectationFailure": false
}

Pour exécuter vos spécifications (suites de tests), ajoutez simplement ceci à vos scripts npm } et exécutez npm test (ou simplement npm t):

  "scripts": {
    "test": "jasmine"
  },
3
Benny Neugebauer

Vous pouvez utiliser Supertest avec Jasmin, mais vous aurez juste besoin de transmettre manuellement les erreurs. Un problème concernant le projet GitHub a été ouvert à ce sujet il y a un moment.

https://github.com/jasmine/jasmine-npm/issues/31

1
Henry Tseng

Vous pouvez essayer d'utiliser Supertest comme promis avec Jasmine. Cela fonctionne pour moi: https://github.com/WhoopInc/supertest-as-promised

Voici quelques exemples:

 enter image description here

 enter image description here

1
reutsey

Peut-être que vous pourriez essayer supertest avec moka .

Voici un exemple simple:

var request = require('supertest')
  , express = require('express');

var app = express();

app.get('/user', function(req, res){
  res.send(200, { name: 'toto' });
});


describe('GET /user', function(){
  it('should respond with json', function(done){
    request(app)
      .get('/user')
      .set('Accept', 'application/json')
      .expect('Content-Type', 'json')
      .expect(200, done);
  })
})
0
warchimede