我使用Jest来运行Selenium测试。我希望登录测试在其余的webapp功能测试之前进行。我能够使用jest -i
按顺序运行文件,但我无法找到控制文件运行顺序的方法。我尝试更改文件名,希望按顺序排序的文件名,但无论我称之为文件,它仍然以相同的顺序运行。怎么办呢?
这是关于以特定顺序运行,而不是按顺序运行。我已经在做--runInBand
(-i
是别名)。
答案 0 :(得分:4)
这在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"
}
希望对您有帮助!
答案 1 :(得分:2)
就我而言,我使用单个测试文件,其中我需要 .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 :(得分:1)
您现在可以使用测试定序器。检查文档:https://jestjs.io/docs/en/configuration#testsequencer-string
您可能希望将测试定序器与--runInBand
选项结合使用以获得确定的结果。