mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix(angular-mocks): use copy of mock data in $httpBackend
Copy mock data returned from the mock $httpBackend. This prevents modifications to the response from affecting future responses. Previously, this misbehavior was being mitigated by the deep copy in $resource, but that no longer exists.
This commit is contained in:
parent
f1a8d419d5
commit
f69dc16241
2 changed files with 31 additions and 4 deletions
5
src/ngMock/angular-mocks.js
vendored
5
src/ngMock/angular-mocks.js
vendored
|
|
@ -1087,7 +1087,8 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|||
var definitions = [],
|
||||
expectations = [],
|
||||
responses = [],
|
||||
responsesPush = angular.bind(responses, responses.push);
|
||||
responsesPush = angular.bind(responses, responses.push),
|
||||
copy = angular.copy;
|
||||
|
||||
function createResponse(status, data, headers) {
|
||||
if (angular.isFunction(status)) return status;
|
||||
|
|
@ -1119,7 +1120,7 @@ function createHttpBackendMock($rootScope, $delegate, $browser) {
|
|||
function handleResponse() {
|
||||
var response = wrapped.response(method, url, data, headers);
|
||||
xhr.$$respHeaders = response[2];
|
||||
callback(response[0], response[1], xhr.getAllResponseHeaders());
|
||||
callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders());
|
||||
}
|
||||
|
||||
function handleTimeout() {
|
||||
|
|
|
|||
30
test/ngMock/angular-mocksSpec.js
vendored
30
test/ngMock/angular-mocksSpec.js
vendored
|
|
@ -766,7 +766,7 @@ describe('ngMock', function() {
|
|||
|
||||
describe('object literal format', function() {
|
||||
var mock = { log: 'module' };
|
||||
|
||||
|
||||
beforeEach(function() {
|
||||
module({
|
||||
'service': mock,
|
||||
|
|
@ -782,7 +782,7 @@ describe('ngMock', function() {
|
|||
expect(service).toEqual(mock);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('should support multiple key value pairs', function() {
|
||||
inject(function(service, other) {
|
||||
expect(other.some).toEqual('replacement');
|
||||
|
|
@ -891,6 +891,32 @@ describe('ngMock', function() {
|
|||
});
|
||||
|
||||
|
||||
it('should respond with a copy of the mock data', function() {
|
||||
var mockObject = {a: 'b'};
|
||||
|
||||
hb.when('GET', '/url1').respond(200, mockObject, {});
|
||||
|
||||
callback.andCallFake(function(status, response) {
|
||||
expect(status).toBe(200);
|
||||
expect(response).toEqual({a: 'b'});
|
||||
expect(response).not.toBe(mockObject);
|
||||
response.a = 'c';
|
||||
});
|
||||
|
||||
hb('GET', '/url1', null, callback);
|
||||
hb.flush();
|
||||
expect(callback).toHaveBeenCalledOnce();
|
||||
|
||||
// Fire it again and verify that the returned mock data has not been
|
||||
// modified.
|
||||
callback.reset();
|
||||
hb('GET', '/url1', null, callback);
|
||||
hb.flush();
|
||||
expect(callback).toHaveBeenCalledOnce();
|
||||
expect(mockObject).toEqual({a: 'b'});
|
||||
});
|
||||
|
||||
|
||||
it('should throw error when unexpected request', function() {
|
||||
hb.when('GET', '/url1').respond(200, 'content');
|
||||
expect(function() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue