2016-09-06 14 views
2

私はangeljs.Iの書き込みテストには新しく、私はjohn papaスタイルガイドに従って書いたコントローラを持っています。私のコントローラのそれらのメソッドにアクセスする必要がありますテストcase.Howは、私はそれを行うのですか、私はjasmine.Myのサンプルコードを使用しています:?john papaスタイルガイドに従って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スタイルの場合、を使用して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

関連する問題