为什么(JS 测试库)AVA 没有 "Suites"(或任何其他分组)?

Why Doesn't (JS Testing Library) AVA Have "Suites" (or Any Other Groupings)?

我正在查看 AVA 测试 运行ner,它的并发功能似乎非常引人注目。但是,我习惯了 Mocha,你可以像这样组织你的测试:

describe('Some Class', () => {
    describe('#someMethod', () => {
        describe('some condition', () => {
            it('does something', () => {});
        });
    });
});

通过以这种方式组织测试,您可以很容易地分辨出当一堆测试失败时哪些组件受到影响,并且您可以很容易地重新运行 特定 class/method/condition 的测试。

但是 AVA 没有这些。它的测试根本没有任何 "meta-information",只是:

test(t => {
    t.deepEqual([1, 2], [1, 2]);
});

但显然 AVA 是一个流行且广泛使用的框架,所以我的问题是:它如何在没有测试元信息的情况下工作?在 AVA 中是否有其他定义元信息的方法?是不是因为 AVA 有其他功能才不需要元信息?

基本上,作为一个 AVA 局外人,我试图了解当你有一个真正的测试套件时它是如何工作的(不仅仅是 AVA 示例中显示的基本测试)。或者换句话说,如果我切换到 AVA,我会错过 Mocha 中的测试组织(以及大多数其他测试 运行 人员)吗?

使用 Ava 一段时间后,我的问题的答案似乎是 Ava 确实 有套件,但与明确定义套件的 Mocha(或类似框架)不同, Ava 中的套件是隐式的,并且基于包含测试的文件。

换句话说,如果您想 运行 某些代码 beforeEach 在给定的 "suite" 中进行测试,只需将这些测试与 test.beforeEach 放在同一个文件中即可] 语句,然后它只会在这些测试之前 运行。

显然,这会导致测试输出的粒度更小,因为您不能像在 Mocha 中那样嵌套 describe 语句。但是,当 Ava 显示测试输出时,它使用文件结构来帮助缓解这种情况。

例如,文件“services/facebook”中的测试 "can login" 将产生以下输出:

services › facebook › can login

如果需要,有一个模块 ava-spec 试图将其重新引入 ava。