Ich habe überall gesucht, um eine Lösung zu finden. Das einzige, was ich gefunden habe, ist ein unbeantworteter Beitrag. Ich entschuldige mich, wenn ich etwas übersehen habe.Node.js/Express/Mocha/Supertest Rest API - leere Anfrage Körper
Das Problem ist, dass, wenn ich versuche, die POST
Werte in der /createQuestion
API zu bekommen, der Körper leer/undefined ist. Ich bekomme Fehler wie diese Cannot read proprety 'question' of undefined
kommt von der API.
Die Express-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);
});
Der Test:
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();
});
});
Was bin ich? Sendet die .send()
die POST
Daten in einem anderen Format? Ist es nicht POST
es an den Körper der Anfrage?
Sie Anfrage (url) haben, wo url definiert? es ist eine App, die Sie zuvor enthalten? – alfonsodev
Oh, richtig. Ich hatte das geändert, bevor ich gepostet habe. Ich habe die Zeile nach oben hinzugefügt, um die URL für die gesamte Anfrage festzulegen, anstatt sie an jeden einzelnen Test zu übergeben. Ich habe die URL-Einträge entfernt. Danke –
bedenken Sie, dass getan() es nur einmal aufgerufen wird, das erste Mal ist es Anruf, es endet Test. – alfonsodev