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

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

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

【问题讨论】:

    标签: jestjs


    【解决方案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"
        }
        

        希望对你有帮助!

        【讨论】:

          猜你喜欢
          • 2014-07-13
          • 2015-12-21
          • 2015-12-18
          • 2010-09-05
          • 1970-01-01
          • 2023-01-08
          • 2014-08-06
          • 2014-12-14
          相关资源
          最近更新 更多