角度 - 单元测试模态工厂调用

时间:2017-08-04 21:23:42

标签: angularjs unit-testing karma-jasmine

如果传递了有效的文件对象,我试图验证是否在模态函数中调用了工厂函数。工厂注入模态控制器,当测试运行时,工厂未定义。测试从模态中调用工厂函数的正确方法是什么?

模态控制器

  angular.module('vicModule')
  .controller('vicModalController', vicModalController);

  vicModalController.$inject = [
    '$uibModalInstance',
    '$uibModal',
    'utilFunctionsFactory'
  ]

  function vicModalController($uibModalInstance, $uibModal, utilFunctionsFactory) {
    mvm.uploadVICs = uploadVICs;

    function uploadVICs(file, error) {
      if (file == null) {
        data.errorMessage = 'file is not found or not supported';
        return;
      }
      if(error.length > 0) {
        $uibModalInstance.close();
        data.errorMessage = 'reading file error';
        return;
      } else {
        var fileData = utilFunctionsFactory.validateCSV(file, error);
      }
    }
  }

模态控制器测试

describe('vicModalController', function() {
  var $controller, vicModalController, vicFactory, utilFunctionsFactory, $q, $scope, $httpBackend, deferred, $uibModalInstance;
  beforeEach(module('fotaAdminPortal'));
  beforeEach(module('vicModule'));
  beforeEach(inject(function(_$controller_, _vicFactory_, _utilFunctionsFactory_, _$q_, _$rootScope_, _$httpBackend_) {
    $controller = _$controller_;
    vicFactory = _vicFactory_;
    utilFunctionsFactory: _utilFunctionsFactory_;
    $q = _$q_;
    $rootScope = _$rootScope_;
    $scope = $rootScope.$new();
    $httpBackend = _$httpBackend_;
    $uibModalInstance = { // Create a mock object using spies
      close: jasmine.createSpy('modalInstance.close'),
      dismiss: jasmine.createSpy('modalInstance.dismiss'),
      result: {
        then: jasmine.createSpy('modalInstance.result.then')
      }
    };
    vicModalController = $controller('vicModalController', {
      vicFactory: vicFactory,
      utilFunctionsFactory: utilFunctionsFactory,
      $uibModalInstance: $uibModalInstance
    });
  }));
  it('should be defined', function() {
    expect(vicModalController).toBeDefined();
  });
  describe('uploadVICS()', function() {
    beforeEach(inject(function(_utilFunctionsFactory_) {
      utilFunctionsFactory = _utilFunctionsFactory_;
      spyOn(utilFunctionsFactory, 'validateCSV').and.callFake(function() {
        return {};
      });
    }));
    it('should call validateCSV() with valid file', function() {
      vicModalController.uploadVICs({}, []);
      expect(utilFunctionsFactory.validateCSV()).toHaveBeenCalledWith({}, []);
    });
  });
});

修改

我在beforeEach中的作业有误:

utilFunctionsFactory: utilFunctionsFactory ; //冒号错误 utilFunctionsFactory = utilFunctionsFactory ; //应该被分配

1 个答案:

答案 0 :(得分:0)

我看到了几个问题:

你在做:

julia> Array((1:3).')
1×3 Array{Int64,2}:
 1  2  3

而不是:

utilFunctionsFactory: _utilFunctionsFactory_;

此外,您断言调用了utilFunctionsFactory = _utilFunctionsFactory_; 的结果:

validateCSV

而不是expect(utilFunctionsFactory.validateCSV()).toHaveBeenCalledWith({}, []); 本身:

validateCSV