Node.js / Express / Moka / Supertest API Rest Vide du Corps de la Requête
Je l'ai cherché partout ce que je peux pour trouver une solution à cette question. La seule chose que j'ai trouvé est un post sans réponse. Je m'excuse si j'ai oublié quelque chose.
Le problème est que lorsque j'essaie d'obtenir de la POST
valeurs dans le /createQuestion
API, le corps est vide/non défini. J'ai des erreurs comme ce Cannot read proprety 'question' of undefined
à venir à partir de l'API.
L'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);
});
Le 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();
});
});
Ce qui me manque? Est le .send()
l'envoi de la POST
données dans un autre format? N'est-il pas POST
ing pour le corps de la demande?
vous avez demande(url), où est une adresse url? c'est une application que vous incluez avant?
Oh, à droite. J'avais changé que juste avant j'ai posté. J'ai ajouté la ligne vers le haut pour mettre l'URL pour l'ensemble de la demande au lieu de passer à chaque test. J'ai supprimé les entrées d'url. Merci
tenir à l'esprit que done() c'est seulement appelé une fois, la première fois c'est un appel, terminer le test.
pouvez-vous essayez de supprimer les deuxième demande ( request().post('/deleteQuestion') ) ?
La droite. Merci. J'ai enlevé le premier fait().
Oh, à droite. J'avais changé que juste avant j'ai posté. J'ai ajouté la ligne vers le haut pour mettre l'URL pour l'ensemble de la demande au lieu de passer à chaque test. J'ai supprimé les entrées d'url. Merci
tenir à l'esprit que done() c'est seulement appelé une fois, la première fois c'est un appel, terminer le test.
pouvez-vous essayez de supprimer les deuxième demande ( request().post('/deleteQuestion') ) ?
La droite. Merci. J'ai enlevé le premier fait().
OriginalL'auteur Mike DeMille | 2013-10-25
Vous devez vous connecter pour publier un commentaire.
C'est probablement que votre application n'est pas en utilisant bodyParser middleware en place.
De la expressjs docs:
req.corps
Cette propriété est un objet contenant l'analyse du corps de la requête. Cette fonctionnalité est fournie par le bodyParser() middleware, bien que d'autres corps de l'analyse middleware peut suivre cette convention. Cette propriété par défaut {} lorsque bodyParser() est utilisé.
Ici vous avez un exemple complet
Cela a fonctionné pour moi aussi. Pour express 3.x et 4.x, vous devez utiliser corps-parser pas d'exprimer.bodyParser() :
app.use(require('body-parser').json())
OriginalL'auteur alfonsodev