Я искал всюду, где могу найти решение. Единственное, что я нашел, - это неотвеченный пост. Прошу прощения, если я что-то упустил.Node.js/Express/Mocha/Supertest Rest API - пустой запрос тела
Проблема в том, что когда я пытаюсь получить значения POST
в API /createQuestion
, тело пуст/не определено. Я получаю ошибки, подобные этому Cannot read proprety 'question' of undefined
, исходящие из API.
Экспресс API:
app.post("/createQuestion", function(req, res) {
var questionType = req.body.question.type;
var questionText = req.body.question.text;
var questionDuringClass = req.body.question.duringClass;
// Do a bunch of stuff
res.send(response);
});
Тест:
var should = require('should');
var assert = require('assert');
var request = require('supertest');
var winston = require('winston');
request = request('http://localhost:8080');
describe('Questions', function() { // Test suite
before(function(done) {
done();
});
it('Should create a freeResponse question', function(done) { // Test case
var postData = {
"question" : {
"type" : "freeResponse",
"text" : "This is a test freeResponse question (automated testing)",
"duringClass" : "1"
}
};
request()
.post('/createQuestion')
.send(postData)
.expect(200)
.end(function(err, res) { // .end handles the response
if (err) {
return done(err);
}
done();
});
});
it('Should delete a freeResponse question', function(done) { // Test case
var postData = {
"question" : {
"type" : "freeResponse",
"text" : "This is a test freeResponse question (automated testing)",
"duringClass" : "1"
}
};
request()
.post('/deleteQuestion')
.send(postData)
.expect(200)
.end(function(err, res) { // .end handles the response
if (err) {
return done(err);
}
done();
});
});
Что мне не хватает? Является ли .send()
отправкой данных POST
в другом формате? Разве это не POST
Входящий в тело запроса?
вы запрос (URL), где URL определен? это приложение, которое вы включили раньше? – alfonsodev
О, право. Я изменил это прямо перед тем, как я опубликовал. Я добавил строку вверху, чтобы задать URL-адрес для всего запроса, а не передавать его каждому отдельному тесту. Я удалил записи URL. Спасибо –
учтите, что done() он называется только один раз, когда он первый раз, он заканчивает тест. – alfonsodev