2016-02-27 2 views
3

Я работаю с browserify, чтобы рассказать об угловом сервисе. Я использую jasmine писать тесты для этой службы, которая определяется как:Тестирование углового обслуживания, которое также является обещанием

angular 
    .module('Client', []) 
    .factory('client', ['url', 'otherService', '$http', '$log', client]) 

function client (url, otherService, $http, $log) { 
    $log.debug('Creating for url %s', url) 
    var apiRootPromise = $http.get(url).then(function (apiRoot) { 
    $log.debug('Got api root %j', apiRoot) 
    return otherService.stuff(apiRoot.data) 
    }) 
    return Object.assign(apiRootPromise, otherService) 
} 

В следующий набор тестов:

describe('test client', function() { 
    beforeEach(function() { 
     angular.mock.module('Client') 
     angular.mock.module(function ($provide) { 
     $provide.value('url', 'http://localhost:8080/') 
     }) 
    }) 

    it('should connect at startup', angular.mock.inject(function (client, $rootScope, $httpBackend) { 
     $rootScope.$apply() 
     $httpBackend.flush() 
     expect(client).toBeDefined() 
    })) 
    }) 

кидает TypeError: undefined is not a constructor на (evaluating Object.assign(apiRootPromise, otherService)'). Я не уверен, что здесь происходит, но мое лучшее предположение - Угловое, не впрыскивает должным образом зависимую услугу или не возвращает обещание $http.

ответ

1

Possible duplicate question

Object.assign введен в ECMAScript 6-е издание, и в настоящее время не поддерживается изначально во всех браузерах. Попробуйте использовать полипол для Object.assign. Вот один:

if (typeof Object.assign != 'function') { 
    (function() { 
    Object.assign = function (target) { 
     'use strict'; 
     if (target === undefined || target === null) { 
     throw new TypeError('Cannot convert undefined or null to object'); 
     } 

     var output = Object(target); 
     for (var index = 1; index < arguments.length; index++) { 
     var source = arguments[index]; 
     if (source !== undefined && source !== null) { 
      for (var nextKey in source) { 
      if (source.hasOwnProperty(nextKey)) { 
       output[nextKey] = source[nextKey]; 
      } 
      } 
     } 
     } 
     return output; 
    }; 
    })(); 
} 

В противном случае, ваш код working in this fiddle (я должен был заполнить несколько бланков, но общая суть есть)

Смежные вопросы