2013-04-16 129 views
23

我似乎有讓我的茉莉花單元測試,實際執行的問題。我已經驗證了我的所有腳本都得到通過設置日誌級別到LOG_DEBUG加載。我的單元測試是相同的服務測試@https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js噶不執行任何單元測試

而且,我已經使用Testacular(之前它改名爲噶),我不記得有這個問題。我似乎讓Chrome運行,但我不得不手動點擊「調試」按鈕。即使我點擊這個按鈕,我的測試也不會運行。

系統細節:

  • Windows 7的
  • 節點v0.10.4
  • 鉻26.0.14
  • 噶0.8.5(安裝了3個警告 - 2所損失的精度和一個'沒有定義內聯函數v8 :: Persistent v8 :: Persistent :: New(v8 :: Handle)')

這是我的模塊代碼(腳本/ main.js):

angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify); 
angular.module('sb.directives', []); 
angular.module('sb.filters', []); 
angular.module('sb.controllers', []).controller('SbController', [ 
    '$scope', 
    'amplify', 
    function ($scope, amplify) { 
     $scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')'; 
    } 
]); 
angular.module('sb', [ 
    'sb.services', 
    'sb.directives', 
    'sb.filters', 
    'sb.controllers' 
]); 

這裏是我的規格(測試/單位/ servicesSpec.js):

'use strict'; 

describe('my services', function() { 
    beforeEach(module('sb.services')); 

    describe('version', function() { 
     it('should return current version', inject(function(version) { 
      expect(version).toEqual('0.0.1'); 
     })); 
    }); 
}); 

這是我的karma.conf.js文件:

// Karma configuration 
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time) 


// base path, that will be used to resolve files and exclude 
basePath = ''; 


// list of files/patterns to load in the browser 
files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 
    'Vendor/angular-1.0.6/angular.js', 
    'Vendor/angular-1.0.6/angular-*.js', 
    'Vendor/json2/json2.js', 
    'Vendor/jquery/jquery-1.8.2.js', 
    'Vendor/amplify/amplify.js', 
    'Scripts/main.js', 
    'Test/unit/*.js' 
]; 


// list of files to exclude 
exclude = [ 

]; 


// test results reporter to use 
// possible values: 'dots', 'progress', 'junit' 
reporters = ['progress']; 


// web server port 
port = 9876; 


// cli runner port 
runnerPort = 9100; 


// enable/disable colors in the output (reporters and logs) 
colors = true; 


// level of logging 
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 
logLevel = LOG_WARN; 


// enable/disable watching file and executing tests whenever any file changes 
autoWatch = false; 


// Start these browsers, currently available: 
// - Chrome 
// - ChromeCanary 
// - Firefox 
// - Opera 
// - Safari (only Mac) 
// - PhantomJS 
// - IE (only Windows) 
browsers = ['Chrome']; 

junitReporter = { 
    outputFile: 'Test/out/unit.xml', 
    suite: 'unit' 
}; 


// If browser does not capture in given timeout [ms], kill it 
captureTimeout = 60000; 


// Continuous Integration mode 
// if true, it capture browsers, run tests and exit 
singleRun = false; 
+0

我想我有這個漂亮的晚了,但我認爲你必須設置要麼'singleRun'或'autoWatch'爲true。 – fodma1

回答

11

我最後的回答是錯誤的(將JASMINE和JASMINE_ADAPTER行移到angular.js行下面)。它解決了這個特定的問題,但創建了其他問題。相反,我做了什麼來解決它是隻指定角嘲笑文件,而不是angular- *,就像這樣:

JASMINE, 
    JASMINE_ADAPTER, 
    'Vendor/angular-1.0.6/angular.js', 
    'Vendor/angular-1.0.6/angular-mocks.js', 
    'Vendor/json2/json2.js', 
    'Vendor/jquery/jquery-1.8.2.js', 
    'Vendor/amplify/amplify.js', 
    'Scripts/main.js', 
    'Test/unit/*.js' 
+0

感謝您的幫助rquinn,任何想法爲什麼有所有角JS文件包括導致測試不運行? – Darren

+5

這是因爲用於端到端測試的角度場景文件。我認爲這和angular-mocks文件有衝突。 –

+1

感謝這幫了我,我發現可以使用排除如下跳過情況文件。 – Darren

13

另外,您可以使用您karma.conf.js排除部分

exclude = [ 
    'Vendor/angular-1.0.6/angular-scenario.js' 
]; 
14

我剛剛遇到了同樣的問題,我發現我必須在Karma自動運行測試之前設置autoWatch = true

6

如果您嘗試使用JASMINE和JASMINE_ADAPTER解決此問題,則不再支持此功能(至少在Karma版本0.10.2上)。

而是使用:

frameworks: ['jasmine'] 

在噶配置文件。你可以閱讀關於這個here

我還發現,我的文件陣列我爲一個模式設置included: falseincluded僅在您想手動包含Javascript文件時使用(例如,如果您將使用require.js)。如果所有的測試將從該模式被加載,你會看到類似的消息:由於一點也沒有包括含測試文件

PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs/0 secs) 

。從文件陣列模式我,因爲如果包括未指定默認的解決了這個拆卸included: falsetrue

7

我嘗試了所有上面沒有成功,直到最後......

在我karma.conf.js我刪除了requirejs依賴,如:

frameworks: ['jasmine', 'requirejs'], 

到:

frameworks: ['jasmine'], 
1

在我的案例singleRun被設置爲false

解決方案 // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true