我有一个角度应用程序,在引导之前调用2个服务,我想模拟或存根这些调用。否则,karma会尝试执行这些调用,并在控制台中继续显示错误。
我该怎么做?
请参阅下面的getConfig()
和getUser()
函数:
JavaScript的:
import appConstant from './app-gouvernementales.constant.js';
import appConfig from './app-gouvernementales.config.js';
import appRun from './app-gouvernementales.run.js';
import AppComponent from './app-gouvernementales.component.js';
const requires = [
'ngMessages',
'ngRoute',
'ngSanitize',
'permission',
'permission.ng',
'ngMockE2E',
];
const app = angular
.module('app-gouvernementales', requires)
.config(appConfig)
.run(appRun)
.component('appGouvernementales', AppComponent)
.name;
// create and bootstrap application
getConfig()
.then((config) => {
angular.module('app-gouvernementales')
.constant('APP_SETTINGS', appConstant(config));
return { url: `${config.protocol}://${config.host}`, uid: config.shibbolethUid };
})
.then(data => getUser(data.url, data.uid))
.catch((err) => {
console.log(err);
document.location.href = '/erreur/role';
})
.then((_user_) => {
const user = _user_.data;
angular.module('app-gouvernementales')
.constant('USER', user);
})
.then(() => {
angular.bootstrap(document, ['app-gouvernementales']);
});
function getConfig() {
const initInjector = angular.injector(['ng']);
const $http = initInjector.get('$http');
return $http.get('/gouvernementales/app-gouvernementales.config.json')
.then(response => response.data);
}
function getUser(url, uid) {
const initInjector = angular.injector(['ng']);
const $http = initInjector.get('$http');
return $http.get(`${url}/roles`, { withCredentials: true, headers: { 'X-uid': uid } });
}
export default app;
答案 0 :(得分:0)
您可以使用settings
。
$httpBackend
但理想情况下,您不希望在单元测试时引导整个应用程序,而只是想要测试的特定模块。在这种情况下,您可以模拟传递给该模块的数据。