Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix(ngMock): pass failed HTTP expectations to $errorHandler
Browse files Browse the repository at this point in the history
This was only partially fixed in
f18dd29
  • Loading branch information
thorn0 committed Jul 25, 2018
1 parent e500fb6 commit 490d1f7
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/ngMock/angular-mocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -1511,15 +1511,25 @@ function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
}

if (expectation && expectation.match(method, url)) {
var expectationError;

if (!expectation.matchData(data)) {
throw new Error('Expected ' + expectation + ' with different data\n' +
'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data);
expectationError = new Error('Expected ' + expectation + ' with different data\n' +
'EXPECTED: ' + prettyPrint(expectation.data) + '\n' +
'GOT: ' + data);
}

if (!expectation.matchHeaders(headers)) {
throw new Error('Expected ' + expectation + ' with different headers\n' +
'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' +
prettyPrint(headers));
expectationError = new Error('Expected ' + expectation + ' with different headers\n' +
'EXPECTED: ' + prettyPrint(expectation.headers) + '\n' +
'GOT: ' + prettyPrint(headers));
}

if (expectationError) {
// In addition to be being converted to a rejection, this error also needs to be passed to
// the $exceptionHandler and be rethrown (so that the test fails).
expectationError.$$passToExceptionHandler = true;
throw expectationError;
}

expectations.shift();
Expand Down
45 changes: 45 additions & 0 deletions test/ngMock/angular-mocksSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -1506,6 +1506,33 @@ describe('ngMock', function() {
});


it('should throw error when expectation fails', function() {
expect(function() {
hb.expectPOST('/some', {foo: 1}).respond({});
hb('POST', '/some', {foo: 2}, callback);
hb.flush();
}).toThrowError(/^Expected POST \/some with different data/);
});


it('should throw error when expectation about headers fails', function() {
expect(function() {
hb.expectPOST('/some', {foo: 1}, {X: 'val1'}).respond({});
hb('POST', '/some', {foo: 1}, callback, {X: 'val2'});
hb.flush();
}).toThrowError(/^Expected POST \/some with different headers/);
});


it('should throw error when expectation about both data and headers fails', function() {
expect(function() {
hb.expectPOST('/some', {foo: 1}, {X: 'val1'}).respond({});
hb('POST', '/some', {foo: 2}, callback, {X: 'val2'});
hb.flush();
}).toThrowError(/^Expected POST \/some with different/);
});


it('should match headers if specified', function() {
hb.when('GET', '/url', null, {'X': 'val1'}).respond(201, 'content1');
hb.when('GET', '/url', null, {'X': 'val2'}).respond(202, 'content2');
Expand Down Expand Up @@ -2833,6 +2860,24 @@ describe('ngMockE2E', function() {
}).toThrowError('Unexpected request: GET /some\nNo more request expected');
});

it('should throw error when expectation fails - without error callback', function() {
expect(function() {
hb.expectPOST('/some', { foo: 1 }).respond({});
$http.post('/some', { foo: 2 }).then(noop);

hb.flush();
}).toThrowError(/^Expected POST \/some with different data/);
});

it('should throw error when unexpected request - with error callback', function() {
expect(function() {
hb.expectPOST('/some', { foo: 1 }).respond({});
$http.post('/some', { foo: 2 }).then(noop, noop);

hb.flush();
}).toThrowError(/^Expected POST \/some with different data/);
});


describe('passThrough()', function() {
it('should delegate requests to the real backend when passThrough is invoked', function() {
Expand Down

0 comments on commit 490d1f7

Please sign in to comment.