2017-10-19 9 views
0

を使用してJSON配列を読み取ろうとするとき、私は次のようJSONペイロードを持っている:エラー万一、モカ、&Supertest

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

と、次の.jsファイル(MochaSupertestShouldを使用して):

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

アプリをテストすると、次のエラーメッセージが表示されます。

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' 

これらの行にアサーションエラーが表示されるのはなぜですか?

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

答えて

2

アサーションは存在しないlast_commit.author_nameというプロパティを探しています。それを2つのアサーションに分割したいかもしれません。

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

もっと良い方法がありますか?子要素のn個の子要素を含むペイロードがある場合はどうなりますか? – TheAuzzieJesus

+0

次に、アサーションで使用する前にプロパティ文字列をオブジェクト表現に変換する関数を抽出することができます。 – nilobarp