test
Some checks failed
test / Run tests (push) Failing after 6s
build / Build (push) Failing after 9s

This commit is contained in:
2025-03-19 18:05:54 +08:00
parent c2219db73e
commit fd2aba4286
31 changed files with 584 additions and 199 deletions

View File

@ -1,2 +0,0 @@
// <root>/__mocks__/webextension-polyfill.ts
export { fakeBrowser as default } from "@webext-core/fake-browser";

55
tests/utils.test.ts Normal file
View File

@ -0,0 +1,55 @@
import { describe, expect, it, vitest } from "vitest";
import { initTestEnv, initTestGMApi } from "./utils";
import GMApi from "@App/runtime/content/gm_api";
import { randomUUID } from "crypto";
import { newMockXhr } from "mock-xmlhttprequest";
import { Script, ScriptDAO } from "@App/app/repo/scripts";
initTestEnv();
describe("测试GMApi环境", async () => {
const msg = initTestGMApi();
const script: Script = {
uuid: randomUUID(),
name: "test",
metadata: {
grant: [
// gm xhr
"GM_xmlhttpRequest",
],
connect: ["example.com"],
},
namespace: "",
type: 1,
status: 1,
sort: 0,
runStatus: "running",
createtime: 0,
checktime: 0,
};
await new ScriptDAO().save(script);
const gmApi = new GMApi(msg);
//@ts-ignore
gmApi.scriptRes = {
uuid: script.uuid,
};
const mockXhr = newMockXhr();
mockXhr.onSend = async (request) => {
return request.respond(200, {}, "example");
};
global.XMLHttpRequest = mockXhr;
it("test GM xhr", async () => {
const onload = vitest.fn();
await new Promise((resolve) => {
gmApi.GM_xmlhttpRequest({
url: "https://scriptcat.org/zh-CN",
onload: (res) => {
console.log(res);
resolve(res);
onload(res);
},
});
});
expect(onload).toBeCalled();
});
});

View File

@ -3,8 +3,15 @@ import LoggerCore from "@App/app/logger/core";
import DBWriter from "@App/app/logger/db_writer";
import migrate from "@App/app/migrate";
import { LoggerDAO } from "@App/app/repo/logger";
import { MockMessage } from "@Packages/message/mock_message";
import { Message, Server } from "@Packages/message/server";
import { MessageQueue } from "@Packages/message/message_queue";
import { ValueService } from "@App/app/service/service_worker/value";
import GMApi from "@App/app/service/service_worker/gm_api";
import OffscreenGMApi from "@App/app/service/offscreen/gm_api";
import EventEmitter from "eventemitter3";
export default function initTestEnv() {
export function initTestEnv() {
// @ts-ignore
if (global.initTest) {
return;
@ -42,3 +49,27 @@ export default function initTestEnv() {
});
logger.logger().debug("test start");
}
export function initTestGMApi(): Message {
const wsEE = new EventEmitter();
const wsMessage = new MockMessage(wsEE);
const osEE = new EventEmitter();
const osMessage = new MockMessage(osEE);
const serviceWorkerServer = new Server(wsMessage);
const mq = new MessageQueue(serviceWorkerServer);
const valueService = new ValueService(serviceWorkerServer.group("value"), mq);
const swGMApi = new GMApi(serviceWorkerServer.group("runtime"), osMessage, valueService);
valueService.init();
swGMApi.start();
// offscreen
const offscreenServer = new Server(osMessage);
const osGMApi = new OffscreenGMApi(offscreenServer.group("gmApi"));
osGMApi.init();
return wsMessage;
}
export function initTestOffscreen() {}

View File

@ -1,3 +1,3 @@
import { vi } from "vitest";
import chromeMock from "@Packages/chrome-extension-mock";
vi.mock("webextension-polyfill");
chromeMock.init();