Я пытаюсь протестировать два маршрута, которые почти одинаковы, за исключением того, что один из них более конкретен, поскольку последний сегмент URL-адреса является жестко закодированным значением (редактирование), а другой имеет параметр (: slug).
Проблема, с которой я сталкиваюсь, заключается в том, что когда запрос выполняется, он вызывает оба маршрута (редактировать, показывать), в результате чего мое ложное ожидание never() никогда не проходит :(
Я делаю что-то неправильно? Я не понимаю, почему выполняются оба маршрута, если один из них более конкретен...
Это тест:
var request = require('supertest')
, express = require('express')
describe('routes', function() {
it('should call only edit', function(done) {
var usersController = require('./users-controller');
var sandbox = require('sinon').sandbox.create();
var mockController = sandbox.mock(usersController);
mockController.expects('edit').yields(null).once();
mockController.expects('show').never();
var app = express();
app.get('/users/:id/edit', usersController.edit);
app.get('/users/:id/:slug', usersController.show);
request(app)
.get('/users/123/edit')
.end(function(err, res){
if (err) throw err;
mockController.verify();
done();
});
});
});
а вот users-controlle.js, над которым я издеваюсь выше:
exports.edit = function(req, res, next) {
res.send('edit');
}
exports.show = function(req, res, next) {
res.send('show');
}