2017-02-14 9 views
0

У меня есть этот экспресс-контроллер, чтобы найти количество непрочитанных уведомлений, что пользователь является получателем. Здесь:Почему ответ в работе Postman работает, но не мой тест?

app.get('/api/user/:uid/notifications/newcount', (req, res, next) => { 
    const firebaseUID = req.params.uid; 

    User.findOne({ firebaseUID }) 
     .select('_id') 
     .then(user => Notification.count({ 
      recipients: { $eq: user._id }, 
      usersRead: { $ne: user._id } 
     }) 
    ) 
     .then(notificationCount => { 
     console.log(notificationCount.toString()); 
     return res.send(notificationCount.toString()) 
     }) 
     .catch(next); 
    }); 

Это прекрасно работает в почтальоне.

Я пытаюсь проверить его с помощью Mocha/Supertest. Однако по какой-то причине res.body всегда возвращается как пустой объект.

Консольные журналы в реальном контроллере всегда проходят через штраф, хотя.

Если я не отправлю toString() в res.send(), я получаю ошибки.

res.body должен возвращаться как 1.

Как я могу взять res.body в нижнем тесте, чтобы сделать утверждение?

it.only('GET to /api/user/firebaseUID/notifications/newcount, gets users unread notifications', 
    done => { 
     request(app) 
     .get(`/api/user/${matt.firebaseUID}/notifications/newcount`) 
     .end((err, res) => { 
      console.log(res.body); 

      done(); 
     }); 
    }); 

Спасибо!

+0

Что происходит с 'res.statusCode' и' res.text', когда тест терпит неудачу? – Matt

+0

res.text работал :) спасибо – bloppit

+0

Почему бы ему не пройти через тело? – bloppit

ответ

1

superagent В модуле, который supertest основан на свойство response.body заполняется только тогда, когда ответ может быть parsed в объект JavaScript. Свойство response.text будет содержать тело простой реакции как строку.

Похоже, что text property name следует из responseText в XMLHttpRequest.