AngularJs单元测试,用冒号(:)解析url params

时间:2014-05-07 05:42:34

标签: angularjs unit-testing

我有像mydomain.com/restapi/somemethod/paramValue这样的休息网址。

在我的角度js app中,相同的网址看起来像mydomain.com/restapi/somemethod/ :paramValue 当我调用该函数时,一切正常。

但是现在我正在编写一些单元测试并希望使用相同的url(我创建了一些var并使用工厂在整个app中共享它们),如:

$httpBackend.expectGET(SomeService.getDataUrl).respond(mockResponse);

问题是我收到错误

Error: Unexpected request: GET restapi/somemethod/1
Expected GET restapi/somemethod/:paramValue

哪个有意义。有没有办法调用angularJs url解析机制,以便在单元测试中,params的值可以替换为值?

注意:使用服务共享网址的重点是我想确保生产和测试代码中使用的网址相同。

1 个答案:

答案 0 :(得分:1)

  

有没有办法调用angularJs url解析机制,以便在单元测试中,params的值可以用那些值替换?

使用拦截器替换参数:

$httpProvider.interceptors.push(function($q, dependency1, dependency2) {
  return {
   'request': function(config) {
   // intercept request
  },

'response': function(response) {
   // intercept response
   }
 };
});

Angular团队在项目测试套件中使用了类似的东西:

  it('should allow manipulation of request', function() {
    module(function($httpProvider) {
      $httpProvider.interceptors.push(function() {
        return {
          request: function(config) {
            config.url = '/intercepted';
            config.headers.foo = 'intercepted';
            return config;
          }
        };
      });
    });
    inject(function($http, $httpBackend, $rootScope) {
      $httpBackend.expect('GET', '/intercepted', null, function(headers) {
        return headers.foo === 'intercepted';
      }).respond('');
      $http.get('/url');
      $rootScope.$apply();
    });
  });

<强>参考