最新のURLセグメントがハードコードされた値(編集)であり、もう一方がパラメーター(:slug)を持っているため、一方がより具体的であることを除いて、ほとんど同じ2つのルートをテストしようとしています。
私が経験している問題は、リクエストが実行されると、両方のルート(edit、show)が呼び出され、モックの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');
}