Я занимаюсь созданием функциональных тестов для существующего nodejs api, который я написал. Я использую mocha и expect.js.Тестирование Node.js api с mocha
Один тест, который терпит неудачу, - это когда я хочу сделать отрицательный тест на наличие параметра url. Я хочу отправить сообщение обратно потребителю услуги, если параметр отсутствует.
В настоящее время положительный тест у меня есть работы:
var request = require('request');
it('get a specific user from the api', function (done) {
request.get('http://localhost:8080/api/v1/user/123', function (error, response, body) { ... });
});
Однако следующий не работает, и все это я получаю тайм-аут:
it('should return a 400 message if UserId is not supplied stating that "UserId expected"', function(done) {
request.get('http://localhost:8080/api/v1/user/', function (error, response, body) {
if (!error && response.statusCode == 400) {
expect(body).to.be.equal('UserId expected');
done();
}
});
});
Обе вышеуказанные тесты проверяют эту конечную точку:
app.get('/api/v1/user/:userid', function (req, res) {
if(!req.params.userid) {
return res.status(400).json('UserId expected');
}
... get the user and return it with status 200 ...
});
Однако, как указано ранее, первое испытание является успешным, в то время как второе время проверки ,
Update 1: Кроме того, я получаю следующий результат:
GET /api/v1/user/123 200 2.905 ms - 274
GET /api/v1/user/ - - ms - -
Update 2: Таким образом, добавив следующий код решает эту проблему, но на самом деле не решает проблему:
app.get('/api/v1/user', function (req, res) {
return res.status(400).json('UserId expected');
});
Очевидно, я не хочу, чтобы вокруг стоял довольно избыточный код. Я не понимаю, почему я не могу войти в конечную точку api/v1/user /: userid и просто проверить наличие там :userid
? Это как если nodejs требует наличия :userid
, в противном случае конечная точка не существует. Это верно?
Что мне не хватает?
У вас нет, если что-то возвращается с сервера? Можете ли вы просто добавить некоторые console.log/breakpoints на обоих сайтах, чтобы увидеть, где он застрял? Откуда вы знаете, что ваш первый тест не претерпел никаких утверждений или вы просто его отрубили? – Sprotte
Я добавил console.log как на сервере, так и на тест, и я не получаю ответа от сервера. Я думаю, что запрос должен зацикливаться на стороне сервера, но я не могу сказать, где, поскольку у меня есть console.log в самой первой строке конечной точки на сервере, но он никогда не попадает. – Ebbs