Так выглядит мой контроллер:
(function() {
'use strict';
angular.module('myApp', [])
.controller('vmCtrl', vmCtrl);
vmCtrl.$inject = ['$state', 'API', 'serviceConfig'];
function vmCtrl($state, API, serviceConfig) {
var vm = this;
vm.formValues = {};
vm.submitForm = function() {
vm.formValues = {
"name": vm.formValues.name,
"age": "18",
"schoolId": vm.formValues.schoolId,
"mobno": "21234"
};
var url = serviceConfig.BASE_URL + 'details';
API.post(url, vm.formValues)
.then(submitForm_success)
.catch(submitForm_error);
}
}
})();
следующие характеристики в карме вернули успех при тестировании,
it('should define vmCtrl', function() {
expect(vmCtrl).toBeDefined();
});
it('should define submitForm', function() {
expect(vmCtrl.submitForm).toBeDefined();
});
Теперь можно проверить значения внутри объекта formValues? Например, если мне нужно проверить возраст, используя.toEqual(18)
Как написать спецификацию для этого случая?
Сначала необходимо вызвать метод, а затем проверить значение.
it('should define submitForm', function () {
vmCtrl.submitForm();
expect(vmCtrl.formValues.age).toEqual(18);
expect(vmCtrl.formValues.mobno).toEqual(21234);
});
Да, javascript действительно не имеет понятия о частных переменных. Поэтому вы можете написать следующее:
it('should initialize formValues.age', function () {
expect(vmCtrl.formValues.age).toEqual(18);
});
Просто имейте в vmCtrl.submitForm()
, что для прохождения этого теста вам сначала нужно будет вызвать vmCtrl.submitForm()
и для того, чтобы это сработало, вам нужно было бы правильно API.post()