No puedo probar el método DELETE usando mocha y supertest

Estoy tratando de construir una API RESTful para una aplicación de nodo. Construí las rutas y todo está funcionando bien. Pero cuando trato de probarlo, no puedo hacer que el método DELETE funcione, a pesar de que normalmente no funciona bajo pruebas.

Aquí están los códigos para el servidor y la prueba. Servidor:

// set up var express = require('express'); var app = express(); // create our app w/ express var path = __dirname; //root path // configuration app.configure(function() { app.use(express.static(path)); //app.use(express.logger('dev')); // log every request to the console app.use(express.json()); app.use(express.urlencoded()); // pull information from html in POST app.use(express.methodOverride()); // simulate DELETE and PUT }); function start() { // routes require('./app/routes.js')(app); // listen (start app with node server.js) app.listen(process.env.PORT || 5000); console.log("Server listening for incoming conections.."); } //************************ exports.start = start; exports.server = app; 

Prueba:

 var should = require('should'); var assert = require('assert'); var request = require('supertest'); var mongoose = require('mongoose'); var express = require('express'); var server = require(__dirname + './../index.js'); describe('Routing', function() { var url = 'http://localhost:5000'; it('should return status 200 after DELETING a bus', function(done) { request(url) .delete('/api/buses/' + bus.id) .end(function(err, res) { if (err) { throw err; } res.should.have.status(200); done(); }); }); }); 

Y este es el mensaje de error que arroja:

 Routing 1) should return status 200 after DELETING a bus ✖ 1 of 1 test failed: 1) Routing should return status 200 after DELETING a bus: TypeError: Object # has no method 'delete' at Context. (/home/roger/Documents/Buse/test/test.js:63:16) at Test.Runnable.run (/home/roger/Documents/Buse/node_modules/mocha/lib/runnable.js:196:15) at Runner.runTest (/home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:351:10) at /home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:397:12 at next (/home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:277:14) at /home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:286:7 at next (/home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:234:23) at Object._onImmediate (/home/roger/Documents/Buse/node_modules/mocha/lib/runner.js:254:5) at processImmediate [as _immediateCallback] (timers.js:330:15) make: *** [test] Error 1 

Echa un vistazo a la supertest página de GitHub .

Puede pasar un http.Server o una Function para request()

Estás pasando una cadena a la solicitud de función. Intente pasar su objeto de servidor expreso como parámetro de función.

EDITAR: como se ve en los comentarios y en la respuesta de @mpm: s, el problema fue el uso de la función reservada delete() lugar de la función específica del paquete del() .

Para que quede claro, no existe un método para eliminar con supertest, pero el método correcto es del .

por lo que una solicitud de eliminación debe ser probada de esta manera:

 var app=require('./app') var request=require('supertest') //with mocha for instance. describe('test delete',function(){ it('should respond 200',function(done){ request(app).del('/path').expect(200).end(done); }) }); 

Y uno necesita pasar la aplicación (aplicación expresa), no una url o una cadena.