[wip] more test

This commit is contained in:
LouisLam 2021-10-05 20:27:43 +08:00
parent 98436f91b5
commit 73bf1216d1
5 changed files with 53 additions and 21 deletions

View file

@ -150,8 +150,14 @@ The data and socket logic are in `src/mixins/socket.js`.
# Unit Test # Unit Test
Yes, no unit test for now. I know it is very important, but at the same time my spare time is very limited. I want to implement my ideas first. I will go back to this in some points. It is an end-to-end testing. It is using Jest and Puppeteer.
```
npm run build
npm test
```
By default, the Chromium window will be shown up during the test. Specifying `HEADLESS_TEST=1` for terminal environments.
# Update Dependencies # Update Dependencies

View file

@ -1,6 +1,6 @@
module.exports = { module.exports = {
"launch": { "launch": {
"headless": false, "headless": process.env.HEADLESS_TEST || false,
"userDataDir": "./data/test-chrome-profile", "userDataDir": "./data/test-chrome-profile",
} }
}; };

View file

@ -60,7 +60,6 @@ export default {
this.$root.login(this.username, this.password, this.token, (res) => { this.$root.login(this.username, this.password, this.token, (res) => {
this.processing = false; this.processing = false;
console.log(res);
if (res.tokenRequired) { if (res.tokenRequired) {
this.tokenRequired = true; this.tokenRequired = true;

View file

@ -179,7 +179,7 @@ export default {
}); });
socket.on("connect", () => { socket.on("connect", () => {
console.log("connect"); console.log("Connected to the socket server");
this.socket.connectCount++; this.socket.connectCount++;
this.socket.connected = true; this.socket.connected = true;

View file

@ -1,5 +1,6 @@
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
const { Page } = require("puppeteer"); const { Page } = require("puppeteer");
const { sleep } = require("../src/util");
/** /**
* Set back the correct data type for page object * Set back the correct data type for page object
@ -15,11 +16,13 @@ afterAll(() => {
}); });
const baseURL = "http://127.0.0.1:3002";
describe("Init", () => { describe("Init", () => {
const title = "Uptime Kuma"; const title = "Uptime Kuma";
beforeAll(async () => { beforeAll(async () => {
await page.goto("http://127.0.0.1:3002"); await page.goto(baseURL);
}); });
it(`should be titled "${title}"`, async () => { it(`should be titled "${title}"`, async () => {
@ -35,32 +38,56 @@ describe("Init", () => {
await page.type("#floatingPassword", "admin123"); await page.type("#floatingPassword", "admin123");
await page.type("#repeat", "admin123"); await page.type("#repeat", "admin123");
await page.click(".btn-primary[type=submit]"); await page.click(".btn-primary[type=submit]");
await page.waitFor(3000); await sleep(3000);
// Go to /setup again // Go to /setup again
await page.goto("http://127.0.0.1:3002/setup"); await page.goto(baseURL + "/setup");
await page.waitFor(3000); await sleep(3000);
const pathname = await page.evaluate(() => location.pathname); const pathname = await page.evaluate(() => location.pathname);
expect(pathname).toEqual("/dashboard"); expect(pathname).toEqual("/dashboard");
// Go to / // Go to /
await page.goto("http://127.0.0.1:3002"); await page.goto(baseURL);
expect(pathname).toEqual("/dashboard");
expect(pathname).toEqual("/dashboard"); expect(pathname).toEqual("/dashboard");
}); });
describe("Init", () => { describe("Settings", () => {
beforeAll(async () => {
await page.goto(baseURL + "/settings");
});
}); it("Change Language", async () => {
}); await page.select("#language", "zh-HK");
let languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
describe("Status Page", () => { expect(languageTitle).toMatch("語言");
const title = "Uptime Kuma";
beforeAll(async () => { await page.select("#language", "en");
await page.goto("http://127.0.0.1:3002/status"); languageTitle = await page.evaluate(() => document.querySelector("[for=language]").innerText);
}); expect(languageTitle).toMatch("Language");
it(`should be titled "${title}"`, async () => { });
await expect(page.title()).resolves.toMatch(title);
it("Change Theme", async () => {
// Light
await page.click(".btn[for=btncheck1]");
await page.waitForSelector("div.light", {
timeout: 2000
});
await page.click(".btn[for=btncheck2]");
await page.waitForSelector("div.dark", {
timeout: 2000
});
});
});
describe("Status Page", () => {
const title = "Uptime Kuma";
beforeAll(async () => {
await page.goto(baseURL + "/status");
});
it(`should be titled "${title}"`, async () => {
await expect(page.title()).resolves.toMatch(title);
});
}); });
}); });