1
AngularJS 애플리케이션을 구축 중이며 단위 테스트를 시도하고 있습니다. 난 진짜 의존성 대신 모의 서비스를 주입하고 싶다.조롱 된 공장을 사용하여 Jasmine에서 중첩 된 약속을 테스트합니다.
.factory('LoginService',['Login', function(Login){
return {
getActiveUser: function() {
return Login.query({}).$promise.then(
function (users) {
return users[0];
},
function (error) {
console.log(error);
}
);
}
};
}]);
그것은 모든 사용자 목록에서 첫 번째 사용자를 반환하는 간단한 서비스입니다 :
이
내가 테스트를 시도하고있는 서비스입니다. 벨로우 (Bellow)는 mock으로 단위 테스트를 작성하려는 시도이지만 성공하지 못합니다.....
beforeEach(module('loginModule', function($provide) {
mockedService = {
getActiveUser: function() {
return {
then: function(callback) {
return callback({name: 'John'});
}
};
}
};
$provide.value('LoginService', mockedService);
}));
beforeEach(inject(function (_LoginService_, _Login_, _$httpBackend_, $rootScope) {
LoginService = _LoginService_;
Login = _Login_;
scope = $rootScope;
httpBackend = _$httpBackend_;
spyOn(mockedService, 'getActiveEnvironment').andCallThrough();
}));
describe('getActiveUser', function() {
it('should call the function', function() {
LoginService.getActiveUser();
expect(mockedService.getActiveUser).toHaveBeenCalled();
});
it('should return active user', function() {
var user = {};
mockedService.getActiveUser().then(
function (env) {
user = env;
}
)
expect(user.name).toBe("John");
});
});
스파이를 사용하고 직접 서비스 방법을 주입하는 테스트 패스를 만들 수있었습니다. 이제 나는 같은 것을 달성하기를 원하지만 조롱 된 인스턴스로. 첫 번째 테스트는 통과하지만 두 번째 테스트는 실패합니다. 누구나 아이디어가 있습니까? 모의 서비스에
: mockedService.getActiveUsee.then (...) 거 야 이제 질문을 수정 – Sanja
당신이 메서드를 호출해야합니다 : UNDEFINE는 다음 줄에서 함수가 아닙니다'mockedService .getActiveUser()',주의 (')'. 일반적으로 원래의 접근 방식은 올바르지 않습니다 :'mockedService.getActiveUser.then ...'. 모의 서비스의 API는 실제 서비스와 일치하지 않았습니다. 이제 실제 서비스가 있어야합니다. 앱에서와 같이'getActiveUser() '를 호출해야합니다. – dfsq
또한'$ q.when ({username : 'Thomas'});'버전을 사용하는 것이 좋습니다. – dfsq