'use strict'; const request = require('supertest'); const Koa = require('../..'); describe('app.use(fn)', function(){ it('should compose middleware', function(done){ const app = new Koa(); const calls = []; app.use(function *(next){ calls.push(1); yield next; calls.push(6); }); app.use(function *(next){ calls.push(2); yield next; calls.push(5); }); app.use(function *(next){ calls.push(3); yield next; calls.push(4); }); const server = app.listen(); request(server) .get('/') .expect(404) .end(function(err){ if (err) return done(err); calls.should.eql([1,2,3,4,5,6]); done(); }); }) it('should error when a non-generator function is passed', function(){ const app = new Koa(); try { app.use(function(){}); } catch (err) { err.message.should.equal('app.use() requires a generator function'); } }) it('should not error when a non-generator function is passed when .experimental=true', function(){ const app = new Koa(); app.experimental = true; app.use(function(){}); }) })