我正在通過jenkins運行Karma測試。 正常情況下,當測試失敗時,它會顯示測試名稱和測試編號,但在某些情況下,它只顯示編號。Karma以何種順序進行測試?
Karma是否按特定順序運行測試?像按字母順序?
下面是jenkins上我的控制檯輸出的屏幕截圖。
我正在通過jenkins運行Karma測試。 正常情況下,當測試失敗時,它會顯示測試名稱和測試編號,但在某些情況下,它只顯示編號。Karma以何種順序進行測試?
Karma是否按特定順序運行測試?像按字母順序?
下面是jenkins上我的控制檯輸出的屏幕截圖。
它不是噶本身確定在其中測試的運行順序。 主要是確定測試順序的組件是您決定使用Karma的測試運行器。如果您使用摩卡,那麼將使用摩卡的邏輯。如果你使用茉莉花,那麼茉莉花的邏輯將被使用。如果你使用別的東西,那麼將使用其他一些邏輯。
例如,Mocha按照在測試文件中調用describe
和it
的順序運行測試。如果您有兩個測試文件a.js
和b.js
和a.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沒有嘗試運行任何後來的測試。