Karma以什么顺序进行测试?

时间:2017-06-02 13:10:34

标签: angular testing jenkins karma-runner

我通过詹金斯进行了Karma测试。 通常,当测试失败时,它会显示测试名称和测试编号,但在某些情况下,它只显示测试编号。

Karma是否按特定顺序运行测试?按字母顺序排列?

以下是jenkins上我的控制台输出的截图。

enter image description here

1 个答案:

答案 0 :(得分:5)

确定测试运行的顺序不是Karma本身。 主要确定测试顺序的组件是您决定与Karma一起使用的测试运行器。如果您使用Mocha,则将使用Mocha的逻辑。如果你使用Jasmine,那么将使用Jasmine的逻辑。如果你使用其他东西,那么将使用其他一些逻辑。

例如,Mocha按照测试文件中调用describeit的顺序运行测试。如果您有两个测试文件a.jsb.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没有尝试运行任何后来的测试。