我通过詹金斯进行了Karma测试。 通常,当测试失败时,它会显示测试名称和测试编号,但在某些情况下,它只显示测试编号。
Karma是否按特定顺序运行测试?按字母顺序排列?
以下是jenkins上我的控制台输出的截图。
答案 0 :(得分:5)
确定测试运行的顺序不是Karma本身。 主要确定测试顺序的组件是您决定与Karma一起使用的测试运行器。如果您使用Mocha,则将使用Mocha的逻辑。如果你使用Jasmine,那么将使用Jasmine的逻辑。如果你使用其他东西,那么将使用其他一些逻辑。
例如,Mocha按照测试文件中调用describe
和it
的顺序运行测试。如果您有两个测试文件a.js
和b.js
并且a.js
首先执行,那么Mocha将首先在a.js
中运行测试。如果首先执行b.js
,那么Mocha将首先在b.js
中运行测试。 Mocha没有进一步的排序。 (Mocha有一个sort
选项,但它仅在使用mocha
命令行工具在Node中运行Mocha时使用。它不适用于在Karma中使用Mocha,因为Karma运行Mocha 在浏览器中,其中Mocha不支持sort
。)
如果使用模块加载器(如RequireJS或SystemJS)动态加载测试文件,这会使事情复杂化。如果执行require(["a", "b"])
并且这两个模块不相互依赖,然后他们加载的顺序是不确定的。 a
可能先加载,或b
可能先加载,因此运行测试的顺序可能会在一次运行到下一次运行时不一致。您可以通过配置或嵌套require
调用来强制执行订单。 (例如,再假设模块不相互依赖,require(["a"], () => require("b"))
确保a
中的测试将在b
中的测试之前执行。)
进一步的复杂性是,如果某些测试运行程序确定您的测试套件有错误,则会中止测试运行。这不会改变测试的顺序但是可能会让它看起来像缺少测试。例如,Mocha认为用于设置和拆除测试数据的钩子中的错误(通过反对测试中的错误本身)是测试套件中的错误并将中止运行。如果您的三个测试依赖于失败的设置代码,Mocha将跳过测试。您将看到三次测试中的一次失败,而不是三次失败。这是一个示例测试文件,在before
挂钩中有3个测试和失败。 (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)
它说&#34;执行1&3;&#34;因为它尝试执行第一次测试,但是这次尝试在before
挂钩失败,所以Mocha没有尝试运行任何后来的测试。