diff options
| author | Igor Minar | 2011-12-28 09:26:22 -0800 | 
|---|---|---|
| committer | Vojta Jina | 2012-01-09 13:17:48 -0800 | 
| commit | a13b5ed3bc337a493029815c595b89c39eb95af6 (patch) | |
| tree | 2ca5380d5cf5aea68218280cccda5d0221517454 /test/angular-mocksSpec.js | |
| parent | 63cca9afbcf7a772086eb4582d2f409c39e0ed12 (diff) | |
| download | angular.js-a13b5ed3bc337a493029815c595b89c39eb95af6.tar.bz2 | |
fix($http): fix and cleanup $http and friends
$http:
- use promises internally
- get rid of XhrFuture that was previously used internally
- get rid of $browser.defer calls for async stuff (serving from cache),
  promises will take care of asynchronicity
- fix transformation bugs (when caching requested + multiple request
  pending + error is returned)
- get rid of native header parsing and instead just lazily parse the
  header string
$httpBackend:
- don't return raw/mock XMLHttpRequest object (we don't use it for
  anything anymore)
- call the callback with response headers string
mock $httpBackend:
- unify response api for expect and when
- call the callback with response headers string
- changed the expect/when failure error message so that EXPECTED and GOT
  values are aligned
Conflicts:
	src/service/http.js
	test/service/compilerSpec.js
	test/service/httpSpec.js
Diffstat (limited to 'test/angular-mocksSpec.js')
| -rw-r--r-- | test/angular-mocksSpec.js | 288 | 
1 files changed, 124 insertions, 164 deletions
| diff --git a/test/angular-mocksSpec.js b/test/angular-mocksSpec.js index a8328f41..88e6a590 100644 --- a/test/angular-mocksSpec.js +++ b/test/angular-mocksSpec.js @@ -465,39 +465,6 @@ describe('mocks', function() {      }); -    it('should expose given headers', function() { -      hb.when('GET', '/u1').respond(200, null, {'X-Fake': 'Header', 'Content-Type': 'application/json'}); -      var xhr = hb('GET', '/u1', null, noop, {}); -      hb.flush(); -      expect(xhr.getResponseHeader('X-Fake')).toBe('Header'); -      expect(xhr.getAllResponseHeaders()).toBe('X-Fake: Header\nContent-Type: application/json'); -    }); - - -    it('should normalize when header name case when accessed via getResponseHeader', function() { -      hb.when('GET', '/u1').respond(200, null, {'X-Fake': 'Header', -                                                'Content-Type': 'application/json', -                                                'Location': '/foo'}); -      var xhr = hb('GET', '/u1', null, noop, {}); -      hb.flush(); -      expect(xhr.getResponseHeader('x-fAKE')).toBe('Header'); -      expect(xhr.getResponseHeader('content-type')).toBe('application/json'); -      expect(xhr.getResponseHeader('Location')).toBe('/foo'); -    }); - - -    it('should normalize expect header name case when accessed via getResponseHeader', function() { -      hb.expect('GET', '/u1').respond(200, null, {'X-Fake': 'Header', -                                                'Content-Type': 'application/json', -                                                'Location': '/foo'}); -      var xhr = hb('GET', '/u1', null, noop, {}); -      hb.flush(); -      expect(xhr.getResponseHeader('x-fAKE')).toBe('Header'); -      expect(xhr.getResponseHeader('content-type')).toBe('application/json'); -      expect(xhr.getResponseHeader('Location')).toBe('/foo'); -    }); - -      it('should preserve the order of requests', function() {        hb.when('GET', '/url1').respond(200, 'first');        hb.when('GET', '/url2').respond(201, 'second'); @@ -508,186 +475,179 @@ describe('mocks', function() {        hb.flush();        expect(callback.callCount).toBe(2); -      expect(callback.argsForCall[0]).toEqual([201, 'second']); -      expect(callback.argsForCall[1]).toEqual([200, 'first']); +      expect(callback.argsForCall[0]).toEqual([201, 'second', '']); +      expect(callback.argsForCall[1]).toEqual([200, 'first', '']);      }); -    it('respond() should take function', function() { -      hb.when('GET', '/some').respond(function(m, u, d, h) { -        return [301, m + u + ';' + d + ';a=' + h.a, {'Connection': 'keep-alive'}]; -      }); - -      var xhr = hb('GET', '/some', 'data', callback, {a: 'b'}); -      hb.flush(); +    describe('respond()', function() { +      it('should take values', function() { +        hb.expect('GET', '/url1').respond(200, 'first', {'header': 'val'}); +        hb('GET', '/url1', undefined, callback); +        hb.flush(); -      expect(callback).toHaveBeenCalledOnce(); -      expect(callback.mostRecentCall.args[0]).toBe(301); -      expect(callback.mostRecentCall.args[1]).toBe('GET/some;data;a=b'); -      expect(xhr.getResponseHeader('Connection')).toBe('keep-alive'); -    }); +        expect(callback).toHaveBeenCalledOnceWith(200, 'first', 'header: val'); +      }); +      it('should take function', function() { +        hb.expect('GET', '/some').respond(function(m, u, d, h) { +          return [301, m + u + ';' + d + ';a=' + h.a, {'Connection': 'keep-alive'}]; +        }); -    it('expect() should require specified order', function() { -      hb.expect('GET', '/url1').respond(200, ''); -      hb.expect('GET', '/url2').respond(200, ''); +        hb('GET', '/some', 'data', callback, {a: 'b'}); +        hb.flush(); -      expect(function() { -        hb('GET', '/url2', null, noop, {}); -      }).toThrow('Unexpected request: GET /url2\nExpected GET /url1'); -    }); +        expect(callback).toHaveBeenCalledOnceWith(301, 'GET/some;data;a=b', 'Connection: keep-alive'); +      }); +      it('should default status code to 200', function() { +        callback.andCallFake(function(status, response) { +          expect(status).toBe(200); +          expect(response).toBe('some-data'); +        }); -    it('expect() should have precendence over when()', function() { -      callback.andCallFake(function(status, response) { -        expect(status).toBe(300); -        expect(response).toBe('expect'); +        hb.expect('GET', '/url1').respond('some-data'); +        hb.expect('GET', '/url2').respond('some-data', {'X-Header': 'true'}); +        hb('GET', '/url1', null, callback); +        hb('GET', '/url2', null, callback); +        hb.flush(); +        expect(callback).toHaveBeenCalled(); +        expect(callback.callCount).toBe(2);        }); -      hb.when('GET', '/url').respond(200, 'when'); -      hb.expect('GET', '/url').respond(300, 'expect'); -      hb('GET', '/url', null, callback, {}); -      hb.flush(); -      expect(callback).toHaveBeenCalledOnce(); -    }); +      it('should default response headers to ""', function() { +        hb.expect('GET', '/url1').respond(200, 'first'); +        hb.expect('GET', '/url2').respond('second'); +        hb('GET', '/url1', null, callback); +        hb('GET', '/url2', null, callback); -    it ('should throw exception when only headers differes from expectation', function() { -      hb.when('GET').respond(200, '', {}); -      hb.expect('GET', '/match', undefined, {'Content-Type': 'application/json'}); +        hb.flush(); -      expect(function() { -        hb('GET', '/match', null, noop, {}); -      }).toThrow('Expected GET /match with different headers\n' + -                 'EXPECTED: {"Content-Type":"application/json"}\nGOT: {}'); +        expect(callback.callCount).toBe(2); +        expect(callback.argsForCall[0]).toEqual([200, 'first', '']); +        expect(callback.argsForCall[1]).toEqual([200, 'second', '']); +      });      }); -    it ('should throw exception when only data differes from expectation', function() { -      hb.when('GET').respond(200, '', {}); -      hb.expect('GET', '/match', 'some-data'); - -      expect(function() { -        hb('GET', '/match', 'different', noop, {}); -      }).toThrow('Expected GET /match with different data\n' + -                 'EXPECTED: some-data\nGOT: different'); -    }); - +    describe('expect()', function() { +      it('should require specified order', function() { +        hb.expect('GET', '/url1').respond(200, ''); +        hb.expect('GET', '/url2').respond(200, ''); -    it('expect() should without respond() and use respond()', function() { -      callback.andCallFake(function(status, response) { -        expect(status).toBe(201); -        expect(response).toBe('data'); +        expect(function() { +          hb('GET', '/url2', null, noop, {}); +        }).toThrow('Unexpected request: GET /url2\nExpected GET /url1');        }); -      hb.when('GET', '/some').respond(201, 'data'); -      hb.expect('GET', '/some'); -      hb('GET', '/some', null, callback); -      hb.flush(); -      expect(callback).toHaveBeenCalled(); -      expect(function() { hb.verifyNoOutstandingExpectation(); }).not.toThrow(); -    }); +      it('should have precedence over when()', function() { +        callback.andCallFake(function(status, response) { +          expect(status).toBe(300); +          expect(response).toBe('expect'); +        }); +        hb.when('GET', '/url').respond(200, 'when'); +        hb.expect('GET', '/url').respond(300, 'expect'); -    it('flush() should flush requests fired during callbacks', function() { -      hb.when('GET').respond(200, ''); -      hb('GET', '/some', null, function() { -        hb('GET', '/other', null, callback); +        hb('GET', '/url', null, callback, {}); +        hb.flush(); +        expect(callback).toHaveBeenCalledOnce();        }); -      hb.flush(); -      expect(callback).toHaveBeenCalled(); -    }); - -    it('flush() should flush given number of pending requests', function() { -      hb.when('GET').respond(200, ''); -      hb('GET', '/some', null, callback); -      hb('GET', '/some', null, callback); -      hb('GET', '/some', null, callback); +      it ('should throw exception when only headers differs from expectation', function() { +        hb.when('GET').respond(200, '', {}); +        hb.expect('GET', '/match', undefined, {'Content-Type': 'application/json'}); -      hb.flush(2); -      expect(callback).toHaveBeenCalled(); -      expect(callback.callCount).toBe(2); -    }); +        expect(function() { +          hb('GET', '/match', null, noop, {}); +        }).toThrow('Expected GET /match with different headers\n' + +                   'EXPECTED: {"Content-Type":"application/json"}\nGOT:      {}'); +      }); -    it('flush() should throw exception when flushing more requests than pending', function() { -      hb.when('GET').respond(200, ''); -      hb('GET', '/url', null, callback); +      it ('should throw exception when only data differs from expectation', function() { +        hb.when('GET').respond(200, '', {}); +        hb.expect('GET', '/match', 'some-data'); -      expect(function() {hb.flush(2);}).toThrow('No more pending request to flush !'); -      expect(callback).toHaveBeenCalledOnce(); -    }); +        expect(function() { +          hb('GET', '/match', 'different', noop, {}); +        }).toThrow('Expected GET /match with different data\n' + +                   'EXPECTED: some-data\nGOT:      different'); +      }); -    it('(flush) should throw exception when no request to flush', function() { -      expect(function() {hb.flush();}).toThrow('No pending request to flush !'); +      it("should use when's respond() when no expect() respond is defined", function() { +        callback.andCallFake(function(status, response) { +          expect(status).toBe(201); +          expect(response).toBe('data'); +        }); -      hb.when('GET').respond(200, ''); -      hb('GET', '/some', null, callback); -      hb.flush(); +        hb.when('GET', '/some').respond(201, 'data'); +        hb.expect('GET', '/some'); +        hb('GET', '/some', null, callback); +        hb.flush(); -      expect(function() {hb.flush();}).toThrow('No pending request to flush !'); +        expect(callback).toHaveBeenCalled(); +        expect(function() { hb.verifyNoOutstandingExpectation(); }).not.toThrow(); +      });      }); -    it('(flush) should throw exception if not all expectations satasfied', function() { -      hb.expect('GET', '/url1').respond(); -      hb.expect('GET', '/url2').respond(); +    describe('flush()', function() { +      it('flush() should flush requests fired during callbacks', function() { +        hb.when('GET').respond(200, ''); +        hb('GET', '/some', null, function() { +          hb('GET', '/other', null, callback); +        }); -      hb('GET', '/url1', null, angular.noop); -      expect(function() {hb.flush();}).toThrow('Unsatisfied requests: GET /url2'); -    }); +        hb.flush(); +        expect(callback).toHaveBeenCalled(); +      }); -    it('respond() should set default status 200 if not defined', function() { -      callback.andCallFake(function(status, response) { -        expect(status).toBe(200); -        expect(response).toBe('some-data'); +      it('should flush given number of pending requests', function() { +        hb.when('GET').respond(200, ''); +        hb('GET', '/some', null, callback); +        hb('GET', '/some', null, callback); +        hb('GET', '/some', null, callback); + +        hb.flush(2); +        expect(callback).toHaveBeenCalled(); +        expect(callback.callCount).toBe(2);        }); -      hb.expect('GET', '/url1').respond('some-data'); -      hb.expect('GET', '/url2').respond('some-data', {'X-Header': 'true'}); -      hb('GET', '/url1', null, callback); -      hb('GET', '/url2', null, callback); -      hb.flush(); -      expect(callback).toHaveBeenCalled(); -      expect(callback.callCount).toBe(2); -    }); +      it('should throw exception when flushing more requests than pending', function() { +        hb.when('GET').respond(200, ''); +        hb('GET', '/url', null, callback); -    it('respond() should set default status 200 if not defined', function() { -      callback.andCallFake(function(status, response) { -        expect(status).toBe(200); -        expect(response).toBe('some-data'); +        expect(function() {hb.flush(2);}).toThrow('No more pending request to flush !'); +        expect(callback).toHaveBeenCalledOnce();        }); -      hb.when('GET', '/url1').respond('some-data'); -      hb.when('GET', '/url2').respond('some-data', {'X-Header': 'true'}); -      hb('GET', '/url1', null, callback); -      hb('GET', '/url2', null, callback); -      hb.flush(); -      expect(callback).toHaveBeenCalled(); -      expect(callback.callCount).toBe(2); -    }); +      it('should throw exception when no request to flush', function() { +        expect(function() {hb.flush();}).toThrow('No pending request to flush !'); -    it('should respond with definition if no response for expectation', function() { -      callback.andCallFake(function(status, response) { -        expect(status).toBe(201); -        expect(response).toBe('def-response'); +        hb.when('GET').respond(200, ''); +        hb('GET', '/some', null, callback); +        hb.flush(); + +        expect(function() {hb.flush();}).toThrow('No pending request to flush !');        }); -      hb.when('GET').respond(201, 'def-response'); -      hb.expect('GET', '/some-url'); -      hb('GET', '/some-url', null, callback); -      hb.flush(); -      expect(callback).toHaveBeenCalledOnce(); -      hb.verifyNoOutstandingExpectation(); +      it('should throw exception if not all expectations satisfied', function() { +        hb.expect('GET', '/url1').respond(); +        hb.expect('GET', '/url2').respond(); + +        hb('GET', '/url1', null, angular.noop); +        expect(function() {hb.flush();}).toThrow('Unsatisfied requests: GET /url2'); +      });      }); @@ -699,7 +659,7 @@ describe('mocks', function() {      }); -    it('should throw an exception if no response for expection and no definition', function() { +    it('should throw an exception if no response for exception and no definition', function() {        hb.expect('GET', '/url');        expect(function() {          hb('GET', '/url', null, callback); @@ -762,7 +722,7 @@ describe('mocks', function() {      }); -    describe('reset', function() { +    describe('resetExpectations', function() {        it('should remove all expectations', function() {          hb.expect('GET', '/u2').respond(200, '', {}); @@ -773,7 +733,7 @@ describe('mocks', function() {        }); -      it('should remove all responses', function() { +      it('should remove all pending responses', function() {          var cancelledClb = jasmine.createSpy('cancelled');          hb.expect('GET', '/url').respond(200, ''); | 
