如何让 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 按特定顺序运行测试?的主要内容,如果未能解决你的问题,请参考以下文章