diff --git a/lib/mockResponse.js b/lib/mockResponse.js index cf6e72a..38aa53b 100644 --- a/lib/mockResponse.js +++ b/lib/mockResponse.js @@ -631,6 +631,16 @@ function createResponse(options = {}) { return this; }; + /** + * Function: appendHeader + * + * Append a header by name. If a header already exists, the new value is appended to the existing header. + */ + mockResponse.appendHeader = function appendHeader(name, value) { + mockResponse.append(name, value); + return this; + }; + /** * Function: removeHeader * diff --git a/test/lib/mockResponse.spec.js b/test/lib/mockResponse.spec.js index 0af6482..51e920c 100644 --- a/test/lib/mockResponse.spec.js +++ b/test/lib/mockResponse.spec.js @@ -84,6 +84,9 @@ describe('mockResponse', () => { expect(response).to.have.property('setHeader'); expect(response.setHeader).to.be.a('function'); + expect(response).to.have.property('appendHeader'); + expect(response.appendHeader).to.be.a('function'); + expect(response).to.have.property('removeHeader'); expect(response.removeHeader).to.be.a('function'); @@ -923,8 +926,8 @@ describe('mockResponse', () => { }); }); - // TODO: fix in 2.0; methods should be inherited from Node OutogingMessage - describe('Node OutogingMessage methods', () => { + // TODO: fix in 2.0; methods should be inherited from Node OutgoingMessage + describe('Node OutgoingMessage methods', () => { describe('.setHeader()', () => { let response; @@ -950,6 +953,24 @@ describe('mockResponse', () => { }); }); + describe('.appendHeader()', () => { + let response; + + beforeEach(() => { + response = mockResponse.createResponse(); + }); + + afterEach(() => { + response = null; + }); + + it('should concatenate header values, when called twice with same name', () => { + response.appendHeader('name', 'value 1'); + response.appendHeader('name', 'value 2'); + expect(response.getHeader('name')).to.eql(['value 1', 'value 2']); + }); + }); + describe('.getHeader()', () => { let response;