2017-08-04 51 views
2

我想驗證一個工廠函數是從模態函數內部調用的,如果傳遞了一個有效的文件對象。工廠被注入到模態控制器中,當測試運行時,工廠是未定義的。測試工廠函數是從模態中調用的正確方法是什麼?角度 - 單元測試模態工廠調用

模態控制器

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; //應分配

回答

0

一對夫婦的問題,我看到:

你正在做的:的

utilFunctionsFactory: _utilFunctionsFactory_; 

代替:

utilFunctionsFactory = _utilFunctionsFactory_; 

而且你聲稱的validateCSV結果被稱爲:

expect(utilFunctionsFactory.validateCSV()).toHaveBeenCalledWith({}, []); 

而不是validateCSV本身:

expect(utilFunctionsFactory.validateCSV).toHaveBeenCalledWith({}, []); 
+0

你是正確的,雖然我已經想通了。不管怎麼說,多謝拉! – neridaj