From 7eaad2f57f6960fbda18d9c9d4ef78602ee9abef Mon Sep 17 00:00:00 2001 From: Ken Chen Date: Sun, 16 Jun 2013 12:58:18 +0800 Subject: [PATCH 1/2] feat(MockHttpExpectation): matchData supports function as data Add support for passing function as validating data: - To avoid hacking test method of RegExp - Optionally overwrite toString method of fn to show validation tips --- src/ngMock/angular-mocks.js | 1 + test/ngMock/angular-mocksSpec.js | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 1b69dac3b297..cb8148873e1f 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -1384,6 +1384,7 @@ function MockHttpExpectation(method, url, data, headers) { this.matchData = function(d) { if (angular.isUndefined(data)) return true; if (data && angular.isFunction(data.test)) return data.test(d); + if (data && angular.isFunction(data)) return data(d); if (data && !angular.isString(data)) return angular.toJson(data) == d; return data == d; }; diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 220f8e58a746..750ed9a3c00f 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -971,6 +971,19 @@ describe('ngMock', function() { }); + it('should accept data as function', function() { + var dataValidator = function(data) { + var json = angular.fromJson(data); + return !!json.id && json.status === 'N'; + }; + var exp = new MockHttpExpectation('POST', '/url', dataValidator); + + expect(exp.matchData({})).toBe(false); + expect(exp.match('POST', '/url', '{"id": "xxx", "status": "N"}')).toBe(true); + expect(exp.match('POST', '/url', {"id": "xxx", "status": "N"})).toBe(true); + }); + + it('should ignore data only if undefined (not null or false)', function() { var exp = new MockHttpExpectation('POST', '/url', null); expect(exp.matchData(null)).toBe(true); From 7da90dcfd5b770b7cec93092b2b972c13c78adb6 Mon Sep 17 00:00:00 2001 From: Ken Chen Date: Sun, 28 Jul 2013 10:43:28 +0800 Subject: [PATCH 2/2] docs($httpBackend): add docs for supporting function as data - change param desc for when, whenPost, whenPut, expect, expectPost, expectPut, expectPATCH --- src/ngMock/angular-mocks.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index cb8148873e1f..17e3bb1b0c52 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -1015,7 +1015,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * * @param {string} method HTTP method. * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header * object and returns true if the headers match the current definition. * @returns {requestHandler} Returns an object with `respond` method that control how a matched @@ -1091,7 +1092,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * Creates a new backend definition for POST requests. For more info see `when()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1105,7 +1107,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * Creates a new backend definition for PUT requests. For more info see `when()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1134,7 +1137,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * * @param {string} method HTTP method. * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header * object and returns true if the headers match the current expectation. * @returns {requestHandler} Returns an object with `respond` method that control how a matched @@ -1203,7 +1207,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * Creates a new request expectation for POST requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1217,7 +1222,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * Creates a new request expectation for PUT requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled. @@ -1231,7 +1237,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) { * Creates a new request expectation for PATCH requests. For more info see `expect()`. * * @param {string|RegExp} url HTTP url. - * @param {(string|RegExp)=} data HTTP request body. + * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives + * data string and returns true if the data is as expected. * @param {Object=} headers HTTP headers. * @returns {requestHandler} Returns an object with `respond` method that control how a matched * request is handled.