2016-10-03 1 views
0

나는 부트 스트랩하기 전에 2 개의 서비스를 호출하는 앵글 응용 프로그램을 가지고 있습니다. 나는 그 호출을 조롱하거나 스텁하고 싶습니다. 그렇지 않으면 karma는 이러한 호출을 수행하려고 시도하고 콘솔에 오류를 계속 표시합니다.로드시 실행되는 AJAX 호출을 모의하거나 스텁하는 방법은 무엇입니까?

어떻게하면됩니까?

자바 스크립트 :

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

당신은 $httpBackend 함께 할 아마 수

는 울부 짖는 getConfig()getUser() 기능을 참조하십시오.

var $httpBackend; 
var yourMockedObject = {}; 

beforeEach(angular.mock.inject(function (_$httpBackend_) { 
    $httpBackend = _$httpBackend_ 
    $httpBackend.expect('GET', 'the/url').respond(yourMockedObject); 
})); 

afterEach(function() { 
    $httpBackend.verifyNoOutstandingExpectation(); 
    $httpBackend.verifyNoOutstandingRequest(); 
}); 

그러나 이상적으로 당신은 단위 테스트가 아니라 단지 특정 모듈을 테스트 할 때 전체 응용 프로그램을 부트 스트랩 싶지 않다. 이 경우 해당 모듈로 전달 된 데이터를 조롱 할 수 있습니다.

+0

이것은 카르마가로드되어야하는 파일을 선택할 때 모든 것을 가져 오는 "엔트리 포인트 파일"이 아니어야한다는 것을 의미합니까? – justinledouxweb

+0

자, 이제 루트 앱 모듈 생성을 부트 스트랩 파일에서 분리하고 앱 모듈 파일과 모든 사양 만로드하도록 카르마를 구성했습니다. 대부분의 테스트는 작동하지만 어떤 이유로 일부 임의의 구성 요소 또는 서비스가로드되지 않습니다 ... 이유를 파악할 수 없습니다. – justinledouxweb

+0

이전 테스트와 거의 같은 이음새가 다음 ​​테스트에 영향을줍니다 – justinledouxweb

관련 문제