gpt4 book ai didi

angular - Karma 以什么顺序运行测试?

转载 作者:太空狗 更新时间:2023-10-29 17:26:39 26 4
gpt4 key购买 nike

我正在通过 jenkins 运行 Karma 测试。通常,当测试失败时,它会显示测试名称和测试编号,但在某些情况下,它只显示编号。

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

下面是我在 jenkins 上的控制台输出的屏幕截图。

enter image description here

最佳答案

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

例如,Mocha 按照 describe 的顺序运行测试。和 it在测试文件中调用。如果你有两个测试文件a.jsb.jsa.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 将用于设置和拆除测试数据的钩子(Hook)中的错误(与测试本身的错误相反)视为测试套件中的错误,并将中止运行。如果您的三个测试依赖于失败的设置代码,Mocha 将跳过这些测试。您会看到三项测试中有一项失败,而不是三项失败。这是一个包含 3 个测试和 before 失败的示例测试文件钩。 (before 钩子(Hook),又名“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)

它说“已执行 1 次,共 3 次”,因为它尝试执行第一个测试,但这次尝试在 before 中失败了 Hook ,因此 Mocha 不会尝试运行任何后续测试。

关于angular - Karma 以什么顺序运行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44329815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com