diff --git a/test/lib/router.js b/test/lib/router.js index 772a178..07d5ab7 100644 --- a/test/lib/router.js +++ b/test/lib/router.js @@ -455,6 +455,44 @@ describe('Router', function () { }); }); + it('matches corresponding requests with optional route parameter', function (done) { + const app = new Koa(); + const router = new Router(); + app.use(router.routes()); + router.get('/resources', function (ctx) { + ctx.should.have.property('params'); + ctx.params.should.be.empty(); + ctx.status = 204; + }); + const id = '10'; + const ext = '.json'; + router.get('/resources/:id{.:ext}?', function (ctx) { + ctx.should.have.property('params'); + ctx.params.should.have.property('id', id); + if (ctx.params.ext) ctx.params.ext.should.be.equal(ext.substring(1)); + ctx.status = 204; + }); + const server = http.createServer(app.callback()); + request(server) + .get('/resources') + .expect(204) + .end(function (err, res) { + if (err) return done(err); + request(server) + .get('/resources/' + id) + .expect(204) + .end(function (err, res) { + if (err) return done(err); + request(server) + .get('/resources/' + id + ext) + .expect(204) + .end(function (err, res) { + done(err); + }); + }); + }); + }); + it('executes route middleware using `app.context`', function (done) { const app = new Koa(); const router = new Router();