如何为john papa stye中编写的控制器函数中附加的对象内部的值编写karma-jasmine测试

时间:2016-06-06 06:08:07

标签: angularjs karma-jasmine

这就是我的控制器的样子:

(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)

测试年龄一样

我应该如何编写此案例的规范?

2 个答案:

答案 0 :(得分:0)

是的,javascript并没有任何私有变量的概念。所以你可以写下面的内容:

it('should initialize formValues.age', function () {
    expect(vmCtrl.formValues.age).toEqual(18);
});

请注意,要通过该测试,您首先需要致电vmCtrl.submitForm()并为了使其正常工作,您需要正确模拟API.post()

答案 1 :(得分:0)

您需要先调用该方法,然后检查该值。

it('should define submitForm', function () {
  vmCtrl.submitForm();
  expect(vmCtrl.formValues.age).toEqual(18);
  expect(vmCtrl.formValues.mobno).toEqual(21234);
});