2017-07-06 71 views
1

我在柴測試中的http響應遇到麻煩,我不知道如何得到res.body的長度,除非通過console.log。摩卡/柴問題與http獲取請求

它是測試我試圖運行:

it('It should have a length of 3061', function(){ 

     chai.request('http://localhost:8080') 
     .get('/api/pac/') 
     .end(function(err,res){ 

      console.log(res.body.length); //it shows 3061 
      expect(res.body).to.have.lengthOf(3061); //it causes error "Cannot read property 'body' of undefined" 

     }); 
    }); 

,如果我嘗試做一個res.body預期,則返回「無法讀取屬性‘身體’的未定義」。但是一個console.log的作品。

console.log(res.body)顯示一個包含3061個對象的json。每個對象有這樣的結構:

iid : {type : Number}, 

dnas : [{ _id : Number, 
     col : Date, 
     reproved : {type : Boolean}, 
     wave : {type: Number, 
       index: true} 
     }], 
name : { type : String, 
     uppercase: true, 
     index: true} 
+0

你可以console.log'res.body'這樣我就能看到你的長度是多少? –

+0

哦,我沒有足夠的聲望發佈圖像,但console.log(res.body)返回一個包含3061個對象的json。像這樣:_ [對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象,對象...] _ – LorD

+0

您不需要拍攝任何圖像。只需將console.log(res.body)中記錄的對象複製粘貼到此處的原始問題中即可。請記住使用代碼文本突出顯示,就像您對問題中的其他代碼所做的那樣。 –

回答

2

您需要通過doneit回調,因爲chai.request('http://localhost:8080').get()是異步的。沒有它,你試圖在it完成後運行一個斷言。換句話說,你需要告訴it等待HTTP請求完成。請注意,我正在使用一些es6。如果您的項目不支持es6,請將我的箭頭替換爲回調函數。

it('should have a length of 3061', done => { 
    chai.request('http://localhost:8080') 
    .get('/api/pac/') 
    .end((err, res) => { 
     if (err) done(err); 

     expect(res.body).to.have.lengthOf(3061); 
     done(); 
    }); 
}); 
0

如何:

expect(res.body.length).to.equal(3061); 

還記得,如果它是.equal.be但這些應該工作之一。

+1

錯誤依然存在:Uncaught TypeError:無法讀取未定義的屬性'body' – LorD

+0

這不能解決由OP。如果'expect()'中的'res.body'表達式導致「無法讀取未定義的屬性」體(這是由JavaScript虛擬機引發的錯誤,而不是Chai引發的),那麼表達式'res.body。長度「必然會導致相同的錯誤。 – Louis

+0

哦,你是對的。我只看到了一半的錯誤。我的錯! –