2013-01-15 5 views
9

Ich versuche Supertest für einige Tests zu verwenden. Hier ist der Code-Schnipsel, die ich zu Test versuchen:Versucht, Supertest zu verwenden, um den Körper der Antwort zu überprüfen - einen Fehler erhalten

it("should create a new org with valid privileges and input with status 201", function(done) { 
    request(app) 
    .post("/orgs") 
    .send({ name: "new_org", owner: "[email protected]", timezone: "America/New_York", currency: "USD"}) 
    .expect(201) 
    .end(function(err, res) { 
     res.body.should.include("new_org"); 
     done(); 
    }); 
}); 

Ich erhalte eine Fehlermeldung beim Versuch, die res Körper zu testen:

TypeError: Object #<Object> has no method 'indexOf' 
    at Object.Assertion.include (../api/node_modules/should/lib/should.js:508:21) 
    at request.post.send.name (../api/test/orgs/routes.js:24:27) 
    at Test.assert (../api/node_modules/supertest/lib/test.js:195:3) 
    at Test.end (../api/node_modules/supertest/lib/test.js:124:10) 
    at Test.Request.callback (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:575:3) 
    at Test.<anonymous> (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:133:10) 
    at Test.EventEmitter.emit (events.js:96:17) 
    at IncomingMessage.Request.end (../api/node_modules/supertest/node_modules/superagent/lib/node/index.js:703:12) 
    at IncomingMessage.EventEmitter.emit (events.js:126:20) 
    at IncomingMessage._emitEnd (http.js:366:10) 
    at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23) 
    at Socket.socketOnData [as ondata] (http.js:1367:20) 
    at TCP.onread (net.js:403:27) 

Ist das ein Fehler in Supertest, oder bin ich Formatierung mein Test falsch? Diesen Dank

+0

Exkurs bestellt: Denken Sie daran, in Ihrem .end zu handhaben err Funktion oder ignoriert alle zuvor ausgelösten Ausnahmen. – backdesk

Antwort

0

kann wie folgt geschrieben werden:

res.body.name.should.equal("new_org"); 

, die den Fehler beheben.

12

Alternativ sollte das auch funktionieren:

res.body.should.have.property("name", "new_org"); 

auch nur eine Note, aber logisch ich denke, es macht Sinn, dies zu expects in einem anderen Gespräch zu setzen statt in dem letzten Rückruf. Diese Funktion kann auch wiederverwendet werden, so neige ich dazu, es wiederverwendbar setzen irgendwo, wenn möglich:

var isValidOrg = function(res) { 
    res.body.should.have.property("name", "new_org"); 
}; 

it("should create a new org with valid privileges and input with status 201", function(done) { 
    request(app) 
    .post("/orgs") 
    .send({ name: "new_org", owner: "[email protected]", timezone: "America/New_York", currency: "USD"}) 
    .expect(201) 
    .expect(isValidOrg) 
    .end(done); 
}); 

Nun könnte man sich vorstellen, eine GET für /orgs/:orgId sind Testen und man konnte nur die gleiche Validierung wiederverwenden.

0

wenn Ihr res.body ist ein Array Sie den Index des Objekts so res.body[res.body.length -1].name.should.equal("new_org") zur Verfügung stellen müssen - wenn Ihr Eigentum der letzte in der Reihe ist und nicht