handle manually written responses
This commit is contained in:
parent
33a513898b
commit
9fe483ca76
2 changed files with 57 additions and 0 deletions
|
@ -184,6 +184,8 @@ function *respond(next){
|
||||||
yield next;
|
yield next;
|
||||||
|
|
||||||
var res = this.res;
|
var res = this.res;
|
||||||
|
if (res.headersSent || !res.socket.writable) return;
|
||||||
|
|
||||||
var body = this.body;
|
var body = this.body;
|
||||||
var head = 'HEAD' == this.method;
|
var head = 'HEAD' == this.method;
|
||||||
var noContent = ~[204, 205, 304].indexOf(this.status);
|
var noContent = ~[204, 205, 304].indexOf(this.status);
|
||||||
|
|
|
@ -134,6 +134,61 @@ describe('app.respond', function(){
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('when res has already been written to', function(){
|
||||||
|
|
||||||
|
it('should not cause an app error', function(done){
|
||||||
|
var app = koa();
|
||||||
|
|
||||||
|
app.use(function *(next){
|
||||||
|
var res = this.res;
|
||||||
|
res.setHeader("Content-Type", "text/html")
|
||||||
|
res.status = 200;
|
||||||
|
res.write('Hello');
|
||||||
|
setTimeout(function () {
|
||||||
|
res.end("Goodbye")
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
var errorCaught = false;
|
||||||
|
|
||||||
|
app.on('error', function (err) {
|
||||||
|
errorCaught = err;
|
||||||
|
});
|
||||||
|
|
||||||
|
var server = app.listen();
|
||||||
|
|
||||||
|
request(server)
|
||||||
|
.get('/')
|
||||||
|
.expect(200)
|
||||||
|
.end(function(err, res){
|
||||||
|
if (err) return done(err);
|
||||||
|
if (errorCaught) return done(errorCaught);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should send the right body', function(done){
|
||||||
|
var app = koa();
|
||||||
|
|
||||||
|
app.use(function *(next){
|
||||||
|
var res = this.res;
|
||||||
|
res.setHeader("Content-Type", "text/html")
|
||||||
|
res.status = 200;
|
||||||
|
res.write('Hello');
|
||||||
|
setTimeout(function () {
|
||||||
|
res.end("Goodbye")
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
var server = app.listen();
|
||||||
|
|
||||||
|
request(server)
|
||||||
|
.get('/')
|
||||||
|
.expect(200)
|
||||||
|
.expect('HelloGoodbye', done);
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe('when .body is missing', function(){
|
describe('when .body is missing', function(){
|
||||||
describe('with status=400', function(){
|
describe('with status=400', function(){
|
||||||
it('should respond with the associated status message', function(done){
|
it('should respond with the associated status message', function(done){
|
||||||
|
|
Loading…
Reference in a new issue