2016-04-09 17 views
2

以前の投稿から角度を変更してフォローアップしましたangularjs jasmine tests: Variable vm not found 角度テストでTypeErrorが発生していますが、何が問題なのかわかりません。ここに私のテストでは、次のとおりです。AngularJSジャスミンテスト:TypeError: '未定義'はオブジェクトではありません

(function(){ 
'use strict'; 
describe('Testing DeliveriesController', function() { 

    beforeEach(module('app.deliveries')); 

    describe('Testing deliveries controller', function(){ 
     var vm, controller; 

     beforeEach(inject(function($controller, $rootScope){ 
      vm = $rootScope.$new(); 
      controller = $controller('DeliveriesController', {$scope:vm}); 
     })); 

     afterEach(function() { 
      vm = undefined; 
      controller = undefined; 
     }); 

     describe('priorities length', function(){ 
      it('it should test priority length', function() { 
       expect(vm.priorities.length).toBe(0); 
      }); 
     }); 
    }); 

    }); 

})(); 

次のように私が手にエラーがある:

PhantomJS 1.9.8 (Mac OS X 0.0.0) Testing DeliveriesController Testing deliveries controller priorities length it should test priority length FAILED 
Error: [$injector:unpr] Unknown provider: DeliveriesServiceProvider <- DeliveriesService <- DeliveriesController 
http://errors.angularjs.org/1.3.20/$injector/unpr?p0=DeliveriesServiceProvider%20%3C-%20DeliveriesService%20%3C-%20DeliveriesController 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4031 
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178) 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4036 
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178) 
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4210) 
    at instantiate (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4227) 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:8524 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:1916 
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:12 
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4219) 
    at workFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:2475) 
undefined 
TypeError: 'undefined' is not an object (evaluating 'vm.priorities.length') 
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:23 
+3

あなたは、コントローラのコードを示してもらえますか?問題をよりよく理解するのに役立ちます。 'DeliveriesController'のように見えるのは、' $ scope'だけでなく 'DeliveriesService'にも依存しています。コントローラーをインスタンス化するときは、すべての依存関係(実際のものかモックされたものか)を提供する必要があります。 – Stubb0rn

+1

あなたは正しいです。そうだった。私はDeliveriesServiceをテストに注入して追加しました。ありがとう男 – noobcoder

+0

@ Stubb0rnあなたのコメントを回答として投稿してください。それは本当に助けになりましたが、あなたがコメントとして残しておけば、見つけるのは簡単ではありません。 –

答えて

0

提供:@StubbbOrnからのコメント:

あなたは、コントローラのコードを示してもらえますか?問題をよりよく理解するのに役立ちます。 DeliveriesControllerのように見えるのは$ scopeだけでなくDeliveriesServiceにも依存しています。コントローラーをインスタンス化するときは、すべての依存関係(実際のものかモックされたものか)を提供する必要があります。

この解決策は私のために働いて、解決策でした。ありがとう@ StubbOrn

0

あなたのコントローラにDeliveriesServiceが使用されているように見えます。

サービスを使用しているときはいつでも、そのサービスを挿入するか、$プロバイダを使用して追加するかを確認する必要があります。

beforeEach(inject(function($controller, $rootScope, _DeliveriesService_){ 
      vm = $rootScope.$new(); 
      DeliveriesSrvc = _DeliveriesService_; 
      controller = $controller('DeliveriesController', {$scope:vm}); 
     })); 

または

beforeEach(module(function ($provide) { 
    mockObj = { 
     functionName: jasmine.createSpy('functionName') 
    } 
    $provide.value('DeliveriesService',mockObj) 
})); 
関連する問題