如何为用 john papa stye 编写的控制器的函数中附加的对象内的值编写 karma-jasmine 测试
How to write a karma-jasmine test for the values inside an object attached in a function for a controller written in john papa stye
这是我的控制器的样子:
(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);
}
}
})();
karma 中的以下规范在测试中返回成功,
it('should define vmCtrl', function() {
expect(vmCtrl).toBeDefined();
});
it('should define submitForm', function() {
expect(vmCtrl.submitForm).toBeDefined();
});
现在可以测试对象 formValues 中的值了吗?就像我需要使用 .toEqual(18)
测试年龄一样
我应该如何编写这种情况的规范?
是的,javascript 确实没有任何私有变量的概念。所以你可以这样写:
it('should initialize formValues.age', function () {
expect(vmCtrl.formValues.age).toEqual(18);
});
请注意,要通过该测试,您首先需要调用 vmCtrl.submitForm()
并且为了使其正常工作,您需要正确模拟 API.post()
您需要先调用方法,然后检查值。
it('should define submitForm', function () {
vmCtrl.submitForm();
expect(vmCtrl.formValues.age).toEqual(18);
expect(vmCtrl.formValues.mobno).toEqual(21234);
});
这是我的控制器的样子:
(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);
}
}
})();
karma 中的以下规范在测试中返回成功,
it('should define vmCtrl', function() {
expect(vmCtrl).toBeDefined();
});
it('should define submitForm', function() {
expect(vmCtrl.submitForm).toBeDefined();
});
现在可以测试对象 formValues 中的值了吗?就像我需要使用 .toEqual(18)
测试年龄一样我应该如何编写这种情况的规范?
是的,javascript 确实没有任何私有变量的概念。所以你可以这样写:
it('should initialize formValues.age', function () {
expect(vmCtrl.formValues.age).toEqual(18);
});
请注意,要通过该测试,您首先需要调用 vmCtrl.submitForm()
并且为了使其正常工作,您需要正确模拟 API.post()
您需要先调用方法,然后检查值。
it('should define submitForm', function () {
vmCtrl.submitForm();
expect(vmCtrl.formValues.age).toEqual(18);
expect(vmCtrl.formValues.mobno).toEqual(21234);
});