-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmonkey-testing.spec.ts
76 lines (60 loc) · 2.43 KB
/
monkey-testing.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import test from "../fixtures/base-fixture";
test.use({ storageState: "state.json" });
const { beforeEach, describe, expect } = test;
describe("Monkey testing", () => {
let errors = [];
beforeEach(async ({ page }) => {
// log out everything from console
page.on("pageerror", (err) => {
console.log(`🐟`, err.message);
errors.push(err.message);
});
// credit to https://github.com/marmelab/gremlins.js/issues/175#issuecomment-1000283640
await page.addInitScript({
path: "./node_modules/gremlins.js/dist/gremlins.min.js",
});
await page.goto("/react-admin-demo/#/customers/878", {
waitUntil: "networkidle",
});
});
test("should catch JavaScript error", async ({ page }) => {
const pageTitle = await page.title();
expect(pageTitle).toBe("Posters Galore Administration");
await page.evaluate(() => {
// simulate error
const testElemsToError = ["#main-content .ra-input", "#main-content input"];
// console.log("🚩 Test log from browser..");
// for (let count = 0; count < 11; count++) {
// Promise.reject(new Error("sad :("));
// }
testElemsToError.forEach((elem) => {
document.querySelectorAll(elem).forEach((elem, index) => {
elem.addEventListener("click", function (e) {
throw new Error(`Click - error on elem ${index}`);
});
elem.addEventListener("touchstart", function (e) {
throw new Error(`Touch error on elem ${index}`);
});
});
});
// customise gremlin.js
const customClicker = gremlins.species.clicker({
clickTypes: ["click"],
canClick: (element) => element.closest("#main-content .MuiCardContent-root"),
});
const customToucher = gremlins.species.toucher({
touchTypes: ["tap", "gesture"],
canTouch: (element) => element.closest("#main-content .MuiCardContent-root"),
});
return gremlins
.createHorde({
strategies: [gremlins.strategies.allTogether({ nb: 10000 })],
randomizer: new gremlins.Chance(4321), // repeatable
species: [gremlins.species.formFiller(), customClicker, customToucher],
})
.unleash();
});
await page.locator("text=Identity").waitFor();
expect(errors.length).toBeGreaterThan(5); // nb: this should essentially be checking against 0 errors, I'm asserting error exists to verify error was injected
});
});