describe('auto/$injector', () => {
let injector: Injector
class CustomService {}
function MyFn($controller, $filter) { }
class MyClass { constructor($controller, $filter) {} }
beforeEach(() => {
angular.module('custom', ['ng'])
.value('$jsonpCallbacks', {})
.value('$rootElement', { on: angular.noop })
.service('customService', CustomService)
injector = angular.injector(['custom'])
})
it('.get should have right parameters', () => {
injector.get('customService')
injector.get('customService', 'nobody')
injector.get<number>('customService')
injector.get<number>('customService', 'nobody')
})
it('.get should have right return type', () => {
// NOTICE: Manual testing in VSCode with mouse hover
// Should have type of their own
const $injector = injector.get('$injector')
const $anchorScroll = injector.get('$anchorScroll')
const $animate = injector.get('$animate')
const $animateCss = injector.get('$animateCss')
const $cacheFactory = injector.get('$cacheFactory')
const $compile = injector.get('$compile')
const $controller = injector.get('$controller')
const $document = injector.get('$document')
const $exceptionHandler = injector.get('$exceptionHandler')
const $filter = injector.get('$filter')
const $http = injector.get('$http')
const $httpBackend = injector.get('$httpBackend')
const $httpParamSerializer = injector.get('$httpParamSerializer')
const $httpParamSerializerJQLike = injector.get('$httpParamSerializerJQLike')
const $interpolate = injector.get('$interpolate')
const $interval = injector.get('$interval')
const $jsonpCallbacks = injector.get('$jsonpCallbacks')
const $locale = injector.get('$locale')
const $location = injector.get('$location')
const $log = injector.get('$log')
const $parse = injector.get('$parse')
const $q = injector.get('$q')
const $rootElement = injector.get('$rootElement')
const $rootScope = injector.get('$rootScope')
const $sce = injector.get('$sce')
const $sceDelegate = injector.get('$sceDelegate')
const $templateCache = injector.get('$templateCache')
const $templateRequest = injector.get('$templateRequest')
const $timeout = injector.get('$timeout')
const $window = injector.get('$window')
const $xhrFactory = injector.get('$xhrFactory')
// Should have type of generic
const customService = injector.get<CustomService>('customService')
expect(customService instanceof CustomService).toBeTruthy()
// Should have type of any
const anyService = injector.get('customService')
expect(customService instanceof CustomService).toBeTruthy()
})
it('.invoke should have right parameters', () => {
injector.invoke((customService: CustomService) => customService)
injector.invoke((customService: CustomService) => customService, {})
injector.invoke((customService: CustomService) => customService, {}, { customService: {} })
injector.invoke(['customService', (customService: CustomService) => customService])
injector.invoke(['customService', (customService: CustomService) => customService], {})
injector.invoke(['customService', (customService: CustomService) => customService], {}, { customService: {} })
injector.invoke<CustomService>((customService: CustomService) => customService)
injector.invoke<CustomService>((customService: CustomService) => customService, {})
injector.invoke<CustomService>((customService: CustomService) => customService, {}, { customService: {} })
injector.invoke<CustomService>(['customService', (customService: CustomService) => customService])
injector.invoke<CustomService>(['customService', (customService: CustomService) => customService], {})
injector.invoke<CustomService>(['customService', (customService: CustomService) => customService], {}, { customService: {} })
})
it('.invoke should have right return type', () => {
// NOTICE: Manual testing in VSCode with mouse hover
// Should have type of CustomService
const customService0 = injector.invoke((customService: CustomService) => customService)
expect(customService0 instanceof CustomService).toBeTruthy()
const customService1 = injector.invoke(['customService', (customService: CustomService) => customService])
expect(customService1 instanceof CustomService).toBeTruthy()
const customService2 = injector.invoke<CustomService>((customService: CustomService) => customService)
const customService3 = injector.invoke<CustomService>(['customService', (customService: CustomService) => customService])
})
//.........这里部分代码省略.........
请发表评论