如何为用 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);
});