2016-07-06 53 views
2

我想要獲得一個基本的單元測試示例工作。這一切都正常工作與此app.js如何將ngRoute注入Jasmine/Karma AngularJS單元測試?

var whapp = angular.module('whapp', []) 
.filter('reverse',[function(){ 
    return function(string){ 
     return string.split('').reverse().join(''); 
    } 
}]); 

這spec.js

describe('Filters', function(){ //describe your object type 
    beforeEach(module('whapp')); //load module 
    describe('reverse',function(){ //describe your app name 
     var reverse, rootScope; 
     beforeEach(inject(function($filter){ //initialize your filter 
      reverse = $filter('reverse',{}); 
     })); 
     it('Should reverse a string', function(){ //write tests 
      expect(reverse('rahil')).toBe('lihar'); //pass 
     }); 
    }); 
}); 

與此因緣文件配置

files: [ 
    'node_modules/angular/angular.js', 
    'node_modules/angular-mocks/angular-mocks.js', 
    'node_modules/angular-mocks/angular-route/angular-route.js', 
    'node_modules/angular-mocks/angular-ui-router/release/angular-ui-router.js', 
     'app/js/*.js', 
     'tests/*.js' 
] 

,當我嘗試注入到ngRoute出現的問題我的模塊在app.js像這樣

var whapp = angular.module('whapp', ['ngRoute']) 
.filter('reverse',[function(){ 
    return function(string){ 
     return string.split('').reverse().join(''); 
    } 
}]); 

在這種情況下,我得到了因果報應以下錯誤:

TypeError: undefined is not a constructor (evaluating 'reverse('rahil')') in tests/spec.js (line 9) 

那麼怎麼辦[更新,即使我沒有角,mock.js庫加載到因果報應如上圖所示出現此錯誤] ...我正確地注入ngRoute到spec.js中?我嘗試了各種各樣的東西,其中沒有一個能夠工作。

+0

如果你不加載ng-route的模擬,但只是允許加載angular.js中的那個,會發生什麼? –

+0

@Amy Blankenship。我得到了描述的錯誤。我沒有加載ng路由的模擬,因爲我不知道如何......這正是問題 - 我怎樣才能加載ng路由的模擬?除非你在談論karma配置中的文件屬性?如果我刪除了這些,我仍然會得到同樣的錯誤。 – geoidesic

+1

恩,你絕對是,除非它只是一個幻像文件,不存在於路徑''node_modules/angular-mocks/angular-route/angular-route.js''。如果它不存在,那很可能會導致問題。 –

回答

2

顯然,你會得到這個錯誤,因爲PhantomJS無法實例化你的主要Angular模塊whapp。一個可能的原因是,文件node_modules/angular-mocks/angular-route/angular-route.js丟失。

顯然,您正在使用npm來管理您的依賴關係。因此,嘗試,以取代當前的文件:

node_modules/angular-route/angular-route.js 

同爲ui-route模塊:

node_modules/angular-ui-router/release/angular-ui-router.js 

我希望這會幫助你。

+0

謝謝。我當時真的很愚蠢n00b ......基本上,業務配置中的包含路徑是錯誤的,因爲一些評論者試圖指出儘管語言不太清楚。做得好! – geoidesic

+1

不客氣。只是一個提示,下次嘗試切換到鉻會拋出一個有意義的錯誤! –