从$ http promise的响应中获取请求数据

时间:2015-07-10 20:31:38

标签: angularjs

我试图对我拥有的http请求进行一些单元测试。我将数据发布到我的http post请求中的第二个参数

var data = {} /* some data object */;
return $http.post(url, data);

但是当我进行单元测试时,我无法检查数据是否已进入。

$httpBackend.expectPOST(cfcmApiPath + 'book/addDocument').respond('IGNORE_ME');
var httpPromise = docComponentRestSvc.addDocumentToBook(22063, doc);
$httpBackend.flush();

这会导致错误:

Error: Expected POST http://192.168.33.10/mymy/api/book/addDocument with different data
    EXPECTED: {"eventId":22063,"sequenceIndex":0,"name":"Nombre","type":"FRONT_OUTSIDE_COVER","value":"Que Tal, Amigo?"}

奇怪的是,当我正常运行时,呼叫似乎正常。这就是为什么我想查看请求数据的原因。但是,我不知道该怎么做。任何建议?

有关详细信息,可能相关的是我有一个'核心'我试图实现的库,基本上我想要使用库中的http,因为库会进行一些转换并将事物保存在缓存中,似乎不会自动从主模块中截获。

1 个答案:

答案 0 :(得分:0)

在测试中查找response.data或其他内容 - 取决于您未与我们分享的代码。



angular.module('document', [])
.service('docComponentRestSvc', function($http) {
  this.addDocumentToBook = function(data) {
    return $http.post('book/addDocument', data)
  }
})

describe('document component', function() {

  var $httpBackend, docComponentRestSvc

  beforeEach(module('document'));

  beforeEach(inject(function(_$httpBackend_, _docComponentRestSvc_) {
    $httpBackend = _$httpBackend_;
    docComponentRestSvc = _docComponentRestSvc_;
  }));


  it('POSTs new document', function() {
    var doc = {
     name: 'Nombre'
    };
    var mockResponse = 'IGNORE_ME';
    $httpBackend.expectPOST('book/addDocument').respond(mockResponse);
    docComponentRestSvc.addDocumentToBook(22063, doc).then(function(response) {
      expect(response.data).toBe(mockResponse);
    })
    $httpBackend.flush();
  });

  afterEach(function() {
    $httpBackend.verifyNoOutstandingExpectation();
    $httpBackend.verifyNoOutstandingRequest();
  });

})

<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" />
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js"></script>
&#13;
&#13;
&#13;