2016-09-06 111 views
2

我是新編寫測試的angularjs.I有一個控制器,我根據約翰帕帕風格guide.I需要訪問這些方法在我的控制器?測試case.How做呢我使用jasmine.My示例代碼:如何在angularjs中編寫測試根據約翰帕帕風格指南

(function(){ 
    angular.module('myapp') 
    .controller('AlertsController', AlertsController); 
AlertsController.$inject = ['$scope', 'StorageFactory'] 
function AlertsController($scope, StorageFactory) { 
    var vm=this; 
    vm.createAlert=createAlert(); 
    function createAlert(){ 
    //function code 
    } 
}) 

和我的測試如下:

'use strict'; 
describe('Controller: AlertsController', function() { 
var AlertsController, scope, StorageFactory; 

beforeEach(module('myapp')); 
beforeEach(inject(function(_$controller_, _StorageFactory_,  _$rootScope_) { 
    scope = _$rootScope_.$new(); 
    AlertsController = _$controller_; 
    StorageFactory = _StorageFactory_; 
})); 

var createController = function() { 
    AlertsController('AlertsController', { 
     '$scope': scope, 
     'StorageFactory': StorageFactory 
    }); 

}; 
it('should create an alert', function() { 
    spyOn(StorageFactory, 'isLoggedIn').and.callFake(function() { 
     return true; 
    }); 
    createController(); 
    expect(AlertsController).toBeDefined(); 
    AlertsController.createAlert(); 
}); 
}); 

正在以下錯誤:

TypeError: undefined is not a constructor (evaluating 'AlertsController.createAlert()') in /Users/Ramya/Documents/panitr_mobile/test/spec/controllers/AlertsCtrlSpec.js (line 57) 
    at /Users/Ramya/Documents/panitr_mobile/test/spec/controllers/AlertsCtrlSpec.js:57:37 
PhantomJS 2.0.0 (Mac OS X 0.0.0): Executed 2 of 2 (1 FAILED) (0 secs/0.242 secPhantomJS 2.0.0 (Mac OS X 0.0.0): Executed 2 of 2 (1 FAILED) (0.054 secs/0.242 secs) 

回答

0

對於Jhon Papa風格,您不需要使用$new創建scope。當創建控制器而不是$scope時, 只是通過{}

並且位置控制器初始化在beforeEach之內;

beforeEach(inject(function(_$controller_, _StorageFactory_,  _$rootScope_) { 
      AlertsController = _$controller_; 
      StorageFactory = _StorageFactory_; 
      AlertsController('AlertsController', {} }); 
     })); 

it("creatAlert should be defined",function(){ 

    expect(AlertsController.creatAlert).toBe(true); 
}) 
+0

我需要訪問測試中的createAlert方法,你能告訴我怎麼做嗎? – Ramya

+0

@Ramya請參閱更新。 –

+0

我試過你的更新答案,但得到錯誤「預計未定義爲真」。 – Ramya