我正在尝试为使用 Keycloak 进行身份验证的 Angular 应用程序编写一个测试套件。
但是,由于 Keycloak 要求您手动引导 Angular 并设置一些拦截器,因此由于以下错误,我无法启动任何测试:
Error: $injector:unpr
Unknown Provider: AuthProvider <- Auth <- authInterceptor <- $http <- $templateRequest <- $route
Run Code Online (Sandbox Code Playgroud)
这是引发错误的拦截器的代码:
angular.module('MPMReportGenerator')
.factory('authInterceptor', function authInterceptor ($q, Auth, $log) {
return {
request: function (config) {
var deferred = $q.defer()
Auth.updateToken(5).success(function () {
config.headers = config.headers || {}
config.headers.Authorization = 'Bearer ' + Auth.token
deferred.resolve(config)
}).error(function () {
deferred.reject('Failed to refresh token')
})
$log.info(deferred.promise)
return deferred.promise
}
}
})
Run Code Online (Sandbox Code Playgroud)
我的想法是我应该模拟拦截器并让它返回请求。但是,我不知道如何做到这一点,因为这个拦截器永远不会作为依赖项注入任何地方,它只是用上面的块声明,就是这样。我对模拟服务的理解是它们需要注入到某个地方才能被模拟。
我在 Angular 中的 Keycloak 实现直接来自他们的示例(如果有帮助的话)。