jenkins Karma以什么顺序运行测试?

tkqqtvp1  于 2023-03-17  发布在  Jenkins
关注(0)|答案(3)|浏览(141)

我正在通过jenkins运行Karma测试,通常当一个测试失败时,它会显示测试名称和测试编号,但在某些情况下,它只显示编号。
卡玛的测试是按特定顺序进行的吗,比如字母顺序?
下面是我在jenkins上的控制台输出截图。

bogh5gae

bogh5gae1#

Karma本身并不决定测试运行的顺序。**主要决定测试顺序的组件是您决定与Karma一起使用的测试运行程序。**如果您使用Mocha,则将使用Mocha的逻辑。如果您使用Jasmine,则将使用Jasmine的逻辑。如果您使用其他组件,则将使用其他一些逻辑。
例如,Mocha按照测试文件中调用describeit的顺序运行测试。如果您有两个测试文件a.jsb.js,并且先执行a.js,则Mocha将先运行a.js中的测试。如果先执行b.js,那么Mocha将首先在b.js中运行测试。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将跳过这些测试。您将看到三个测试中有一个失败,下面是一个示例测试文件,其中包含3个测试和before钩子中的一个失败。(before钩子,又名“before all”,用于在一组测试之前设置测试数据。)

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)

它显示为“Executed 1 of 3”,因为它尝试执行第一个测试,但在before钩子中失败,因此Mocha没有尝试运行任何后续测试。

2wnc66cl

2wnc66cl2#

你可以编辑karma.config文件,在karma.config文件的jasmine部分添加一个'random=false'标志。我在这个博客中找到了这个答案,它对我很有效:https://www.miguoliang.com/how-to-fix-testing-order-in-angular-with-jasmine.html

niwlg2el

niwlg2el3#

上面的答案在使用jasmine的情况下也是正确的。url不再工作,编辑是不可能的,所以这里是一小部分代码作为答案:
在karma.conf.js中添加以下行(如果密钥jasmine已经存在,则编辑并添加random):

client: {
   jasmine: {
     random: false
   },
 };

相关问题