单元测试传递给Controller函数的参数值的变化

时间:2016-01-20 13:06:25

标签: javascript angularjs unit-testing karma-jasmine

我想测试是否更改了函数参数中传递的变量。传递给它的变量应该改变。

我正在使用Karma和Jasmine进行单元测试。

我的控制器代码如下所示:

angular.module('myApp').controller('MyController', function($scope){
  $scope.functions = {};
  $scope.functions.deleteSomething = function(someObject, condition){
      someObject.someArray = someObject.someArray.filter(function(existingCondition){
          return existingCondition !== condition;
      });
  };
})

我的单元测试:

describe('myControllerSpec', function(){
  var scope, controller;

  beforeEach(module('myApp'));
  beforeEach(inject(function($injector, $controller){
    scope = $injector.get('$rootScope').$new();
    controller = $controller('MyController', {
      $scope: scope
    });
  }));
  
  it("should check if the passed variable is changed or not", function(){
    object = {
        someArray: [
          {
            temp: 'dummy1'
          },
          {
            temp: 'dummy2'
          }
        ]
      };
    
    condition = {
      temp: 'dummy1'
    }
    scope.functions.deleteSomething(object, condition);
    expect(object.someArray).toEqual([
        {
          temp: 'dummy2'
        }
      ]);
  });
})

我无法弄清楚为什么变量不会改变。是因为它没有附加到范围?

但我不想将它附加到范围并以这种方式测试它。我无法更改控制器,因为它由其他人维护。

有关如何测试此代码的任何建议?

1 个答案:

答案 0 :(得分:0)

Javascript中的===执行引用相等性检查。尝试使用angular.equals()

  someObject.someArray = someObject.someArray.filter(function(existingCondition){
      return !angular.equals(existingCondition, condition);
  });