使用Jasmine检查函数中的内部变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Jasmine检查函数中的内部变量相关的知识,希望对你有一定的参考价值。

我在AngularJS应用程序中使用Jasmine和Karma进行单元测试。我需要检查控制器功能中内部变量的值。

这是我的控制器。

(function() {
    'use strict';
    angular
        .module('testApp',[])
        .controller('testController', testController);

    function testController($http, $scope, $timeout) {
        var vm = this;
        vm.getTestValues = getTestValues;

        function getTestValues(){

            vm.serverError = undefined;
            vm.priceList = [];

            $http.get('https://example.com/api/getPrice').then(function(response) {

                vm.priceList = response.data;

                vm.value = vm.priceList[0].itemValue;

                vm.totalValue = vm.value * 10;              

            }).catch(function(e){
                vm.serverError = 'Server Error';
            });
        }
    }
})();

这是我的测试代码

describe('Test Controller', function() {
  beforeEach(module('testApp')); 

  var ctrl;

  beforeEach(inject(function($rootScope, $controller){

    scope = $rootScope.$new();
    ctrl = $controller('testController', { $scope: scope });
  }));


  describe('vm.value', function() {
    it('Should be ', function() {     

        ctrl.getTestValues();

        console.log(ctrl.priceList);


    });
  });  

});

console.log(ctrl.priceList);打印[]

我如何访问vm.priceListvm.valuevm.totalValue中的值?

答案

$http.get是一个异步电话。您将不得不使用$httpBackend对http服务进行单元测试。

您可以浏览以下链接以了解更多信息。

https://docs.angularjs.org/api/ngMock/service/$httpBackend

how to test $http call in angular js?

以上是关于使用Jasmine检查函数中的内部变量的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jasmine 监视私有变量的属性/函数

web代码片段

如何在不使用 Angular 的 spyOn 的情况下检查服务中的方法是不是在 Jasmine 单元测试中被调用?

使用 Jasmine 在 AngularJS 中测试去抖函数从不调用该函数

Jasmine spyOn 函数和返回对象

Spec没有期待——Jasmine测试回调函数