2016-09-24 2 views
0

Я пытаюсь написать единичный тест для углового контроллера, где переменным присваивается значение из служебных вызовов.Единичный тест для углового контроллера с использованием углового обслуживания

Я мог бы выяснить путь до его вызова json, но когда я пытаюсь вызвать api, я получаю сообщение об ошибке. Я не уверен, как получить мои служебные вызовы, сопоставленные с тестированием.

Контроллер

var vm = this; 
vm.creationDate = 8; // test passed 
vm.mainServiceNumber = MainService.getNumber();// test passed 
vm.addNumberFunction = function(a, b){// test passed 
    vm.sumOfTwoNumbers = MainService.addNumbers(a, b); 
} 
MainService.getNumberFromJson().then(function(response){// test failed 
    vm.numberFromJson = response; 
}) 

var id =10; 
vm.getNumberFunction = function(id){// test failed 
    MainService.getNumberJsonFunction(id).then(function(response){ 
    vm.numberFromJsonFunction = response; 
    }) 

} 

Сервис

var service = this; 
service.getNumber = function(){ 
    return 8; 
} 
service.addNumbers = function(a, b){ 
    return a+b; 
} 
service.getNumberFromJson = function(){ 
    var num = {}; 
    num = $q.defer(); 
    num.resolve(7); 
    return num.promise; 
} 

service.getNumberJsonFunction = function(id){ 
    var deferred = {}; 
    deferred = $q.defer(); 
    deferred.resolve(10); 
    return deferred.promise; 
} 

Test Cases

var vm; 
var MainService; 

beforeEach(module('myApp')); 
beforeEach(inject(function(_$controller_, _MainService_) { 

    vm = _$controller_('MainController'); 
    MainService = _MainService_; 


})); 

/*it('should have a timestamp creation date', function() { 
    expect(vm.creationDate).toEqual(jasmine.any(Number)); 
});*/ 

it('should have a value', function() { 
    expect(vm.creationDate).toEqual(8); 
}); 

it('should get a value from service', function() { 
    expect(vm.mainServiceNumber).toEqual(8); 
}); 

it('should get a value from service after addition', function() { 
    vm.addNumberFunction(3, 3); 
    expect(vm.sumOfTwoNumbers).toEqual(6); 
}); 

it('should get a value from service after a service call without passing params', function() { //Test Failed 
    expect(vm.numberFromJson).toEqual(7); //Expected undefined to equal 7. 
}); 

it('should get a value from service after a service call passing params', function() {// Test Failed 
    vm.getNumberFunction(10) 
    expect(vm.numberFromJsonFunction).toEqual(10);//Expected undefined to equal 10. 
}); 

Я удалил все мои испытания коды, такие как spyon, $ http, чтобы держать код простым & чистым.

Я использую https://github.com/Swiip/generator-gulp-angular для базовой установки углового проекта

ответ

0

Следующих сделал мой день с тестовым успехом случаями.

describe('controllers', function(){ 
var vm; 
var MainService; 
var $timeout; 

beforeEach(module('myApp')); 
beforeEach(inject(function(_$controller_,_$timeout_, _MainService_) { 

    vm = _$controller_('MainController'); 
    spyOn(_MainService_, 'getNumberFromJson').and.returnValue(7); 
    spyOn(_MainService_, 'getNumberJsonFunction').and.callThrough(); 
    $timeout = _$timeout_; 

})); 

/*it('should have a timestamp creation date', function() { 
    expect(vm.creationDate).toEqual(jasmine.any(Number)); 
});*/ 

it('should have a value', function() { 
    expect(vm.creationDate).toEqual(8); 
}); 

it('should get a value from service', function() { 
    expect(vm.mainServiceNumber).toEqual(8); 
}); 

it('should get a value from service after addition', function() { 
    vm.addNumberFunction(3, 3); 
    expect(vm.sumOfTwoNumbers).toEqual(6); 
}); 

it('should get a value from service after a service call without passing params', function() { 
    $timeout.flush(); 
    expect(vm.numberFromJson).toEqual(7); 
}); 

it('should get a value from service after a service call passing params', function() { 
    vm.getNumberFunction(7) 
    $timeout.flush(); 
    expect(vm.numberFromJsonFunction).toEqual(7); 
}); 

}); 
Смежные вопросы