1. #1
    Membre du Club
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2006
    Messages : 170
    Points : 63
    Points
    63

    Par défaut [ EXPRESS] Response.body est undefined sur RENDER mais non sur SEND

    Bonjour,

    J'utilise le middleware EXPRESS pour pouvoir gérer les routes de mon site internet, et supertest pour les tests unitaires.
    Regardez ces 2 bouts de code pour les cas suivants :

    1) Requête envoyé avec RENDER à ma page "index.ejs" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    router.get('/api/books/:id', function(req, res) {
       res.status(200).render('index', {books: [new Book(0, 'Mon titre', true)]});
          });
      }
    2) Requête envoyé avec SEND :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    router.get('/api/books/:id', function(req, res) {
            res.status(200).send(new Book(0, 'Mon titre', true));
          });
     
    function Book(id, title, done) {
      this.id = id;
      this.title = title;
      this.status = status;
    }
      }
    Voici mon cas de test qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    const
        _ = require('lodash'),
        {expect} = require('chai'),
        request = require('supertest');
     
    describe('Items', () => {
     
        // Voici ma donnée en base
        const books = [
            {id: 0, title: 'Hello', status: false}
        ];
     
        it('should get book number 0', (done) => {
            request(app)
                .get('/api/books/0')
                .expect(200)
                .end((err, response) => {
                    if (err) {
                        return done(err);
                    }
     
                    expect(response.body).to.be.deep.equal(books[0]);
     
                    done();
                });
        });
    }
    Savez-vous pourquoi response.body est vide dans le cas 1 ({}) et valorisé dans le cas 2 {"done": false, "id": 0, "title": "Hello"} ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    janvier 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2006
    Messages : 170
    Points : 63
    Points
    63

    Par défaut

    En fait, les informations envoyées par la commande RENDER correspond à l'envoi du code de la page web 'index' associée aux paramètres dynamiques à afficher dans la page. Aucune donnée n'est donc envoyée.
    La commande à utiliser pour envoyer les données est donc bien SEND pour récupérer des données (cf response.body) dans la partie des tests unitaires.
    Pour l'affichage de la page web 'index', il est donc nécessaire d'utiliser des requêtes Ajax pour récupérer et afficher les informations envoyées par SEND.
    J'espère que ce post pourra aider d'autre personne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 30/09/2015, 10h15
  2. Boostrap responsive design OK sur Mac mais pas sur iPhone et tablette
    Par dreadstock dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 22/08/2014, 15h19
  3. Réponses: 1
    Dernier message: 23/09/2008, 14h42
  4. Réponses: 1
    Dernier message: 28/03/2007, 19h20
  5. [W3C] style="padding:4;" bien sur IE mais mauvaise sur FF
    Par H-bil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 07/06/2006, 00h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo