如何让 Jest 按特定顺序运行测试?

Posted

技术标签:

【中文标题】如何让 Jest 按特定顺序运行测试?【英文标题】:How to make Jest run tests in a specific order? 【发布时间】:2018-08-21 04:47:37 【问题描述】:

我正在使用 Jest 运行 Selenium 测试。我希望在其他 webapp 功能测试之前进行登录测试。我可以使用jest -i 按顺序运行文件,但我找不到控制文件运行顺序的方法。我尝试更改文件名,希望它是按文件名的排序顺序但它仍然运行无论我如何称呼文件,都以相同的顺序。如何做到这一点?

这是关于按特定顺序运行,而不是按顺序运行。我已经在做--runInBand-i 是它的别名)。

【问题讨论】:

【参考方案1】:

在我的情况下,我使用单个测试文件,我需要按顺序排列 .js:

//main.test.js
require("db.js");
require("tables.js");
require("users.js");
require("login.js");
require("other.js");

例如文件 users.js:

const request = require("supertest");
const assert = require("assert");
const  app, pool  = require("../src/app");

describe("POST /user/create", () => 
    it("return unautorized without token", () => 
        return request(app)
            .post("/user/create")
            .set('Accept', 'application/json')
            .send( token: "bad token..." )
            .expect(401);
    );
    it("create user with token ok", () => 
        return request(app)
            .post("/user/create")
            .set('Accept', 'application/json')
            .send(
                "email": "user1@dom.com",
                "name": "John Doe",
                "pass": "1234",
                "token": "good token..."
            )
            .expect(200)
            .expect('Content-Type', /json/)
            .then(r => 
                assert.deepStrictEqual(r.body, 
                    status: true,
                    info: 'user created',
                    data:  email: 'user1@dom.com', name: 'John Doe' 
                );
                pool.end();
            )
            ;
    );
);

避免在文件中使用单词 test 或 spec,只使用 1 .test.js

【讨论】:

【参考方案2】:

您现在可以使用 测试序列器。查看文档:https://jestjs.io/docs/en/configuration#testsequencer-string

您可能希望将测试定序器与--runInBand 选项结合使用以获得确定性结果。

【讨论】:

【参考方案3】:

目前在 Jest 中这是不可能的(参见 https://github.com/facebook/jest/issues/6194),而且似乎也不可能(参见 https://github.com/facebook/jest/issues/4032#issuecomment-315210901)。

一种选择是为 Jest 提供两种不同的配置,一种用于登录测试,另一种用于其余配置,并在 package.json 文件中包含 2 个脚本条目

// package.json
...
"scripts": 
  "test": "npm run test:login && npm run test:other"
  "test:login": "jest --config jest.login.config.js",
  "test:other": "jest --config jest.other.config.js"

希望对你有帮助!

【讨论】:

以上是关于如何让 Jest 按特定顺序运行测试?的主要内容,如果未能解决你的问题,请参考以下文章

按特定顺序运行 PHPUnit 测试

为啥 Jest --runInBand 会加快测试速度?

如何按特定顺序运行 Maven 测试? [复制]

如何在 JUnit4 中按特定顺序运行测试方法?

测试时按特定顺序加载 Rails 夹具

如何让线程按特定顺序执行?