Test client for Xo-Server
src
├─ user
| ├─ __snapshots__
| | └─ index.spec.js.snap
| └─ index.spec.js
├─ job
¦ └─ index.spec.js
¦
¦
├─ _xoConnection.js
└─ util.js
The tests can describe xo methods or scenarios:
import xo from "../_xoConnection";
describe("user", () => {
// testing a method
describe(".set()", () => {
it("sets an email", async () => {
// some tests using xo methods and helpers from _xoConnection.js
const id = await xo.createTempUser(SIMPLE_USER);
expect(await xo.call("user.set", params)).toBe(true);
expect(await xo.getUser(id)).toMatchSnapshot({
id: expect.any(String),
});
});
});
// testing a scenario
test("create two users, modify a user email to be the same with the other and fail trying to connect them", () => {
/* some tests */
});
});
-
The test environment must remain the same before and after each test:
- each resource created must be deleted
- existing resources should not be altered
-
Make a sentence for the title of the test. It must be clear and consistent.
-
If the feature you want to test is not implemented : write it and skip it, using
it.skip()
. -
Take values that cover the maximum of testing possibilities.
-
If you make tests which keep track of large object, it is better to use snapshots.
-
_xoConnection.js
contains helpers to create temporary resources and to interface with XO.
You can use it if you need to create resources which will be automatically deleted after the test:import xo from "../_xoConnection"; describe(".create()", () => { it("creates a user without permission", async () => { // The user will be deleted automatically at the end of the test const userId = await xo.createTempUser({ email: "[email protected]", password: "batman1", }); expect(await xo.getUser(userId)).toMatchSnapshot({ id: expect.any(String), }); }); });
The available helpers:
createTempUser(params)
getUser(id)
createTempJob(params)
createTempBackupNgJob(params)
createTempVm(params)
getSchedule(predicate)
-
Before running the tests, you have to create a config file for xo-server-test.
> cp sample.config.toml ~/.config/xo-server-test/config.toml
And complete it.
-
To run the tests:
> npm ci > yarn test
You get all the test suites passed (
PASS
) or failed (FAIL
).> yarn test yarn run v1.9.4 $ jest PASS src/user/user.spec.js PASS src/job/job.spec.js PASS src/backupNg/backupNg.spec.js Test Suites: 3 passed, 3 total Tests: 2 skipped, 36 passed, 38 total Snapshots: 35 passed, 35 total Time: 7.257s, estimated 8s Ran all test suites. Done in 7.92s.
-
You can run only tests related to changed files, and review the failed output by using:
> yarn test --watch
Contributions are very welcomed, either on the documentation or on the code.
You may:
- report any issue you've encountered;
- fork and create a pull request.
ISC © Vates SAS