2017-06-02 82 views
5

我正在通過jenkins運行Karma測試。 正常情況下,當測試失敗時,它會顯示測試名稱和測試編號,但在某些情況下,它只顯示編號。Karma以何種順序進行測試?

Karma是否按特定順序運行測試?像按字母順序?

下面是jenkins上我的控制檯輸出的屏幕截圖。

enter image description here

回答

4

它不是噶本身確定在其中測試的運行順序。 主要是確定測試順序的組件是您決定使用Karma的測試運行器。如果您使用摩卡,那麼將使用摩卡的邏輯。如果你使用茉莉花,那麼茉莉花的邏輯將被使用。如果你使用別的東西,那麼將使用其他一些邏輯。

例如,Mocha按照在測試文件中調用describeit的順序運行測試。如果您有兩個測試文件a.jsb.jsa.js首先執行,那麼摩卡將首先運行a.js中的測試。如果首先執行b.js,那麼摩卡將首先運行b.js中的測試。摩卡沒有進一步分類。 (Mocha有sort選項,但只有在使用mocha命令行工具在節點中運行Mocha時纔有用,它不適用於在Karma中使用Mocha,因爲Karma在瀏覽器中運行Mocha ,其中Mocha不支持sort

如果您使用模塊加載程序(如RequireJS或SystemJS)來動態加載測試文件,這會使事情變得複雜。如果你的require(["a", "b"])這兩個模塊不相互依賴,那麼它們加載的順序是不確定的。 a可能首先加載,或者b可能首先加載,所以運行測試的順序可能會從一次運行到下一次運行不一致。您可以通過配置或嵌套require調用來強制執行訂單。 (例如,再次假定不依賴於彼此模塊,require(["a"],() => require("b"))確保在a測試將那些在b之前執行。)

更爲複雜的是,一些測試跑步者將中止測試運行,如果他們確定你的測試套件是越野車。這不會改變測試的順序,但可能會使測試看起來像缺少測試。例如,摩卡認爲用於設置和拆除測試數據的鉤子中的錯誤(通過與測試中的錯誤本身相反)是錯誤的,並會中止運行。如果您的三個測試取決於失敗的設置代碼,Mocha將會跳過測試。你會在三次測試中看到一次失敗,而不是三次失敗。以下是一個包​​含3個測試的示例測試文件,並在before鉤子中失敗。 (before掛鉤,也叫做「全部」,意味着用於在一組測試之前設置測試數據。)

before(() => { 
    throw new Error("oh no!"); 
}); 

it("one",() => {}); 

it("two",() => {}); 

it("three",() => {}); 

這裏是我的karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['mocha'], 
    files: [ 
     'test.js' 
    ], 
    exclude: [ 
    ], 
    preprocessors: { 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

下面是輸出(我把它換成時間戳與<ts>):

<ts>:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/ 
<ts>:INFO [launcher]: Launching browser Chrome with unlimited concurrency 
<ts>:INFO [launcher]: Starting browser Chrome 
<ts>:INFO [Chrome 58.0.3029 (Linux 0.0.0)]: Connected on socket qfNuMyp4q3SyUBOsAAAA with id 24880742 
Chrome 58.0.3029 (Linux 0.0.0) "before all" hook FAILED 
     Error: oh no! 
      at Context.before (test.js:3:11) 
Chrome 58.0.3029 (Linux 0.0.0): Executed 1 of 3 (1 FAILED) ERROR (0.013 secs/0.001 secs) 

它說: 「已經執行的3 1」,因爲它試圖執行第一個測試,但是這個嘗試在before鉤子中失敗,所以Mocha沒有嘗試運行任何後來的測試。

相關問題