2013-06-25 78 views
0

我想用Jasmine寫一個簡單的測試。測試檢查$scope.testFlag是否設置爲false。爲什麼簡單的基於JasmineJS和AngularJS的單元測試不起作用

這裏是我的測試代碼

describe('Abc Controller', function() { 
    var $scope = null; 
    var ctrl = null; 

    //you need to indicate your module in a test 
    beforeEach(module('myApp')); 
    beforeEach(inject(function($rootScope, $controller) { 
    $scope = $rootScope.$new(); 
    ctrl = $controller('abcController', { 
     $scope: $scope 
    }); 
    })); 


    // test 1 
    it('testFlag should be set to False', function() { 
    expect($scope.testFlag).toEqual(false); 
    }); 


}); 

但由於某些原因,我得到這個錯誤:

Error: Unknown provider: ConfigProvider <- Config <- collectionMetaFactory 

,這裏是我的應用程序的app.js的樣子,我感到其中包括testRunner.html

var app = angular.module('myApp') 
    app.constant('Config', 
    { 
     baseURL : serviceURL, 
     httpTimeout : 3600000 // 1 minute 
    }); 
    app.config(function($logProvider) { 
     $logProvider.debugEnabled(true); 
    }); 

我錯過了什麼?

這裏是控制器的片段

app.controller('abcController', function ($scope, $log,abcFactory, Config) { 

     $scope.testFlag = false; 

     // more code follows 

}); 

讓我知道如果你需要看到更多的應用程序的代碼(如工廠,服務和控制器)

+0

你可以發佈控制器嗎? – JasonM

+0

@JasonM,我剛剛發佈了Controller的代碼片段。如果您需要查看更多代碼,請告知我們。 – Watt

+0

這是有點超出我的深度,但是你是否在'abcController'中注入常量'Config'?或者你需要?另外,如果你只是運行這個代碼,它會給你相同的結果,還是直接與茉莉花相關? – JasonM

回答

0

您沒有提供Config您的測試,所以它不識別Config是什麼,這就是爲什麼你得到這個錯誤。

解決方案是使用$provide模塊將Config注入您的測試。方法如下:

describe('Abc Controller', function() { 
    var $scope = null; 
    var ctrl = null; 
    var Config = { 
    baseURL : 'someURL', 
    httpTimeout : 3600000 // 1 minute 
    }; 

    beforeEach(function(){ 
     beforeEach(module('myApp')); 
     module(function (_$provide_) { 
      $provide = _$provide_; 
      $provide.value('Config', Config); 
     }); 
    }); 

    //you need to indicate your module in a test 

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


    // test 1 
    it('testFlag should be set to False', function() { 
    expect($scope.testFlag).toEqual(false); 
    }); 
}); 

這應該成功地運行測試。

希望這可以幫助其他人面臨類似的問題。

相關問題