1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-10 20:52:42 +01:00

🐛 fix unit tests

This commit is contained in:
Flam3rboy 2021-08-26 02:07:16 +02:00
parent 41dd600c06
commit 2e670c8935
5 changed files with 257 additions and 589 deletions

793
util/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -43,7 +43,6 @@
"class-validator": "^0.13.1",
"dot-prop": "^6.0.1",
"env-paths": "^2.2.1",
"jest-test-performance": "^1.0.1",
"jsonwebtoken": "^8.5.1",
"missing-native-js-functions": "^1.2.10",
"node-fetch": "^2.6.1",
@ -56,7 +55,7 @@
},
"jest": {
"setupFilesAfterEnv": [
"jest-test-performance"
"./tests/setupJest.js"
]
}
}

View File

@ -23,7 +23,9 @@ export class BaseClass extends BaseEntity {
super();
this.assign(props);
if (!this.construct.schema) this.construct.schema = { ...schema, $ref: `#/definitions/${this.construct.name}` };
if (!this.construct.schema) {
this.construct.schema = ajv.compile({ ...schema, $ref: `#/definitions/${this.construct.name}` });
}
this.id = this.opts.id || Snowflake.generate();
}
@ -51,7 +53,7 @@ export class BaseClass extends BaseEntity {
@BeforeUpdate()
@BeforeInsert()
validate() {
const valid = ajv.validate(this.construct.schema, this.toJSON());
const valid = this.construct.schema(this.toJSON());
if (!valid) throw ajv.errors;
return this;
}

19
util/tests/setupJest.js Normal file
View File

@ -0,0 +1,19 @@
const { performance } = require("perf_hooks");
global.expect.extend({
toBeFasterThan: async (func, target) => {
const start = performance.now();
var error;
try {
await func();
} catch (e) {
error = e.toString();
}
const time = performance.now() - start;
return {
pass: time < target && !error,
message: () => error || `${func.name} took ${time}ms of maximum ${target}`,
};
},
});

View File

@ -1,30 +1,31 @@
const { initDatabase } = require("../dist/util/Database");
const { User } = require("../dist/entities/User");
jest.setTimeout(10000);
beforeAll(async () => {
await initDatabase();
new User().validate();
beforeAll((done) => {
initDatabase().then(() => {
new User().validate(); // warm up schema/model
done();
});
});
describe("Validate model class properties", () => {
describe("validation should be faster than 20ms", () => {
expect(() => new User().validate()).toBeFasterThan(20);
});
describe("User", () => {
test("object instead of string", () => {
test("object instead of string", async () => {
expect(() => {
new User({ username: {} }).validate();
}).toThrow();
});
});
test("validation should be faster than 20ms", () => {
expect(() => {
new User().validate();
}).toBeFasterThan(20);
});
test("should not set opts", () => {
const user = new User({ opts: { id: 0 } });
expect(user.opts.id).not.toBe(0);
});
test("test", () => {
expect(1).toBe(1);
});
});