2017-10-19 24 views
0

je la charge utile JSON suivante:Erreur lorsque vous essayez de lire tableau JSON en utilisant devrait, Mocha, et Supertest

"app": { 
    "name": "myapp", 
    "version": "1.0.0", 
    "last_commit": { 
     "author_name": "Jon Snow" 
     "author_email": "[email protected]" 
    } 
} 

et le fichier .js suivant (en utilisant Mocha, Supertest et Should):

var supertest = require('supertest') 
var should = require('should') 
var server = supertest.agent('http://localhost:3001') 

describe('GET /', function() { 
    it('should respond with JSON', function (done) { 
     server 
      .get('/') 
      .set('Accept', 'application/json') 
      .expect('Content-Type', /json/) 
      .expect(200) 
      .end(function (err, res) { 
       var payload = res.body.app; 
       payload.should.have.property("app"); 
       payload.should.have.property("name"); 
       payload.should.have.property("version"); 
       payload.should.have.property("last_commit"); 
       payload.should.have.property("last_commit.author_name"); 
       payload.should.have.property("last_commit.author_email"); 
       done(); 
      }); 
    }); 
}); 

Lorsque je teste l'application, le message d'erreur suivant s'affiche:

Uncaught AssertionError: expected Object { 
    "name": "myapp", 
    "version": "1.0.0", 
    "last_commit": Object { 
     "author_name": "Jon Snow" 
     "author_email": "[email protected]" 
    } 
} to have property 'last_commit.author_name' 

Pourquoi est-ce que je reçois une erreur d'assertion sur ces lignes?

payload.should.have.property("last_commit.author_name"); 
payload.should.have.property("last_commit.author_email"); 

Répondre

2

Assertion est à la recherche d'une propriété appelée last_commit.author_name qui n'est pas présente. Vous voudrez peut-être diviser cela en deux affirmations.

payload.should.have.property("last_commit"); 
let last_commit = payload.last_commit; 
last_commit.have.property("author_name"); 
+0

Y a-t-il un meilleur moyen de le faire? Que faire si j'ai une charge contenant n éléments enfants d'éléments enfants? – TheAuzzieJesus

+0

Ensuite, vous pouvez extraire une fonction qui convertit la chaîne de propriété en une représentation d'objet avant de l'utiliser dans les assertions. – nilobarp