2016-05-13 15 views
0

私のangularjsプロジェクトで単体テストを使い始めようとしています。しかし、このエラーを取得し、問題の原因を把握できませんでした。angularjs karma jasmine undefinedはオブジェクトではありません

fibonacci.service.js

(function() { 
 
    'use strict'; 
 

 
    angular.module('myFirstApp').service('FibonacciService', FibonacciService); 
 

 
    //FibonacciService.$inject = []; 
 
    function FibonacciService() { 
 

 
    // iterative approach 
 
    this.fibonacci = function (num) { 
 
     var prev1 = 1, 
 
     prev2 = 0, 
 
     current = 0; 
 
     for (var n = 2; n <= num; n++) { 
 
     current = prev1 + prev2; 
 
     prev2 = prev1; 
 
     prev1 = current; 
 
     } 
 
     return current; 
 
    }; 
 
    
 
    } 
 
})();

fibonacci.service.tests.js

'use strict'; 
 
describe('myFirstApp.FibonacciService', function() { 
 

 
    var FibonacciService; 
 

 
    beforeEach(module('myFirstApp')); 
 
    beforeEach(module('app.admin')); 
 
    beforeEach(inject(function($injector) { 
 
    FibonacciService = $injector.get('FibonacciService'); 
 
    })); 
 

 
    it('Should output correct Fibanacci numbers', function() { 
 
    expect(FibonacciService.fibonacci(0)).toBe(0); 
 
    expect(FibonacciService.fibonacci(1)).toBe(1); 
 
    expect(FibonacciService.fibonacci(10)).toBe(55); 
 
    }); 
 

 
});

Gruntfile.js

[4mRunning "karma:unit" (karma) task[24m 
[32m13 05 2016 09:13:27.271:INFO [karma]: [39mKarma v0.13.22 server started at http://localhost:9876/ 
[32m13 05 2016 09:13:27.279:INFO [launcher]: [39mStarting browser PhantomJS 
[32m13 05 2016 09:13:29.064:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: [39mConnected on socket /#-RzPN-Jcq2NTtD8pAAAA with id 8973102 
PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 0 of 1 SUCCESS (0 secs/0 secs) 
[1A[2KPhantomJS 2.1.1 (Windows 8 0.0.0) myFirstApp.FibonacciService Should output correct Fibanacci numbers FAILED 
    C:/Users/Denisas/my-yo-project/bower_components/angular/angular.js:4414:53 
    [email protected]:/Users/Denisas/my-yo-project/bower_components/angular/angular.js:336:24 
    [email protected]:/Users/Denisas/my-yo-project/bower_components/angular/angular.js:4374:12 
    [email protected]:/Users/Denisas/my-yo-project/bower_components/angular/angular.js:4299:22 
    [email protected]:/Users/Denisas/my-yo-project/bower_components/angular-mocks/angular-mocks.js:2954:60 
    TypeError: undefined is not an object (evaluating 'FibonacciService.fibonacci') in C:/Users/Denisas/my-yo-project/app/scripts/services/fibonacci.service.tests.js (line 13) 
    C:/Users/Denisas/my-yo-project/app/scripts/services/fibonacci.service.tests.js:13:28 
PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 1 of 1 (1 FAILED) (0 secs/0.022 secs) 
[1A[2KPhantomJS 2.1.1 (Windows 8 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.004 secs/0.022 secs) 
Warning: Task "karma:unit" failed. Use --force to continue. 

... 
 
karma: { 
 
     unit: { 
 
     options: { 
 
      frameworks: ['jasmine'], 
 
      singleRun: true, 
 
      browsers: ['PhantomJS'], 
 
      files: [ 
 
      'bower_components/angular/angular.js', 
 
      'bower_components/angular-mocks/angular-mocks.js', 
 
      //'app/scripts/**/*.js' 
 
      //'app/scripts/app.js', 
 
      //'app/scripts/services/fibonacci.service.js', 
 

 
      'app/scripts/core/core.module.js', 
 
      'app/scripts/core/router.module.js', 
 
      'app/scripts/controllers/admin/admin.module.js', 
 
      'app/scripts/app.js', 
 
      'app/scripts/**/*.js' 
 
      //'app/scripts/services/fibonacci.service.tests.js' 
 

 
      ] 
 
     } 
 
     } 
 
    } 
 
...
は、警告のために中止されました。

実行時間(2016-05-13 06:13:27 UTC) カルマ:ユニット2.2s██████████████████████ ████████████████████████100% 合計2.2s

誰かを助けてください。

答えて

1

次のように私は正常に実行ユニットテストを許可するようにコードを修正:

  • をサービス
(function() { 
    'use strict';  
    angular.module('myFirstApp', []).service('FibonacciService', FibonacciService); 

    function FibonacciService() { 

    // iterative approach 
    this.fibonacci = function (num) { 

     if (num === 0) { 
     return 0; 
     } 

     if (num === 1) { 
     return 1; 
     } 

     var prev1 = 1, 
     prev2 = 0, 
     current = 0; 

     for (var n = 2; n <= num; n++) { 
     current = prev1 + prev2; 
     prev2 = prev1; 
     prev1 = current; 
     } 

     return current; 
    }; 
    } 
})(); 
  • ユニットテスト
'use strict'; 
describe('myFirstApp.FibonacciService', function() { 

    var FibonacciService; 

    beforeEach(module('myFirstApp')); 
    beforeEach(inject(function ($injector) { 
    FibonacciService = $injector.get('FibonacciService'); 
    })); 

    it('Should output correct Fibanacci numbers', function() { 
    expect(FibonacciService.fibonacci(0)).toBe(0); 
    expect(FibonacciService.fibonacci(1)).toBe(1); 
    expect(FibonacciService.fibonacci(10)).toBe(55); 
    }); 
}); 
+0

これはうまくいきました。しかし、私は新しいモジュールを作成するのではなく、既存のモジュールを使用する必要があります。 –

1

私は考え出しこれはアウト。私はGruntfile.js内のすべてのバウアー依存関係を読み込まなければなりませんでした。

関連する問題