我正在尝试测试两条几乎相同的路线,除了其中一条更具体,因为最新的 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');
}