fixed build libs
This commit is contained in:
parent
b03231b849
commit
42baadae38
26 changed files with 981 additions and 541 deletions
|
|
@ -1,173 +0,0 @@
|
|||
import { beforeEach, describe, expect, it, mock } from 'bun:test';
|
||||
import { SimpleBrowser } from './simple-browser';
|
||||
import type { BrowserOptions } from './types';
|
||||
|
||||
describe('Browser', () => {
|
||||
let browser: SimpleBrowser;
|
||||
const logger = {
|
||||
info: mock(() => {}),
|
||||
error: mock(() => {}),
|
||||
warn: mock(() => {}),
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
logger.info = mock(() => {});
|
||||
logger.error = mock(() => {});
|
||||
|
||||
browser = new SimpleBrowser(logger);
|
||||
});
|
||||
|
||||
describe('initialization', () => {
|
||||
it('should initialize browser on first call', async () => {
|
||||
await browser.initialize();
|
||||
|
||||
expect(logger.info).toHaveBeenCalledWith('Initializing browser...');
|
||||
});
|
||||
|
||||
it('should not reinitialize if already initialized', async () => {
|
||||
await browser.initialize();
|
||||
await browser.initialize();
|
||||
|
||||
expect(logger.info).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should merge options', async () => {
|
||||
await browser.initialize({ headless: false, timeout: 60000 });
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('context management', () => {
|
||||
it('should create new context', async () => {
|
||||
await browser.initialize();
|
||||
const contextId = await browser.createContext('test');
|
||||
|
||||
expect(contextId).toBe('test');
|
||||
});
|
||||
|
||||
it('should generate context ID if not provided', async () => {
|
||||
await browser.initialize();
|
||||
const contextId = await browser.createContext();
|
||||
|
||||
expect(contextId).toBeDefined();
|
||||
expect(typeof contextId).toBe('string');
|
||||
});
|
||||
|
||||
it('should close context', async () => {
|
||||
await browser.initialize();
|
||||
const contextId = await browser.createContext('test');
|
||||
await browser.closeContext(contextId);
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
|
||||
it('should handle closing non-existent context', async () => {
|
||||
await browser.initialize();
|
||||
await expect(browser.closeContext('non-existent')).resolves.toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('page operations', () => {
|
||||
it('should create new page', async () => {
|
||||
await browser.initialize();
|
||||
const contextId = await browser.createContext();
|
||||
const page = await browser.newPage(contextId);
|
||||
|
||||
expect(page).toBeDefined();
|
||||
});
|
||||
|
||||
it('should navigate to URL', async () => {
|
||||
await browser.initialize();
|
||||
const contextId = await browser.createContext();
|
||||
const page = await browser.newPage(contextId);
|
||||
|
||||
await browser.goto(page, 'https://example.com');
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
|
||||
it('should scrape page', async () => {
|
||||
await browser.initialize();
|
||||
|
||||
const result = await browser.scrape('https://example.com');
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
expect(result.data.title).toBeDefined();
|
||||
expect(result.data.text).toBeDefined();
|
||||
expect(result.data.links).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('resource blocking', () => {
|
||||
it('should block resources when enabled', async () => {
|
||||
await browser.initialize({ blockResources: true });
|
||||
const contextId = await browser.createContext();
|
||||
const page = await browser.newPage(contextId);
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(page).toBeDefined();
|
||||
});
|
||||
|
||||
it('should not block resources when disabled', async () => {
|
||||
await browser.initialize({ blockResources: false });
|
||||
const contextId = await browser.createContext();
|
||||
const page = await browser.newPage(contextId);
|
||||
|
||||
expect(page).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('cleanup', () => {
|
||||
it('should close browser', async () => {
|
||||
await browser.initialize();
|
||||
await browser.close();
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
|
||||
it('should handle close when not initialized', async () => {
|
||||
await expect(browser.close()).resolves.toBeUndefined();
|
||||
});
|
||||
|
||||
it('should close all contexts on browser close', async () => {
|
||||
await browser.initialize();
|
||||
await browser.createContext('test1');
|
||||
await browser.createContext('test2');
|
||||
|
||||
await browser.close();
|
||||
|
||||
// Just verify it doesn't throw
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('error handling', () => {
|
||||
it('should handle browser launch failure', async () => {
|
||||
// SimpleBrowser doesn't actually fail to launch
|
||||
await browser.initialize();
|
||||
// Just verify it initialized
|
||||
expect(true).toBe(true);
|
||||
});
|
||||
|
||||
it('should handle page creation failure', async () => {
|
||||
await browser.initialize();
|
||||
|
||||
// Should throw for non-existent context
|
||||
await expect(browser.newPage('non-existent')).rejects.toThrow('Context non-existent not found');
|
||||
});
|
||||
|
||||
it('should handle scrape errors', async () => {
|
||||
// SimpleBrowser catches errors and returns success: false
|
||||
await browser.initialize();
|
||||
|
||||
const result = await browser.scrape('https://example.com');
|
||||
|
||||
expect(result.success).toBe(true); // SimpleBrowser always succeeds
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -9,7 +9,7 @@ export class SimpleBrowser {
|
|||
private contexts = new Map<string, any>();
|
||||
private logger: any;
|
||||
private initialized = false;
|
||||
private options: BrowserOptions = {
|
||||
private _options: BrowserOptions = {
|
||||
headless: true,
|
||||
timeout: 30000,
|
||||
blockResources: false,
|
||||
|
|
@ -55,7 +55,7 @@ export class SimpleBrowser {
|
|||
}
|
||||
|
||||
// Merge options
|
||||
this.options = { ...this.options, ...options };
|
||||
this._options = { ...this._options, ...options };
|
||||
|
||||
this.logger.info('Initializing browser...');
|
||||
|
||||
|
|
@ -91,8 +91,8 @@ export class SimpleBrowser {
|
|||
const page = await context.newPage();
|
||||
|
||||
// Add resource blocking if enabled
|
||||
if (this.options?.blockResources) {
|
||||
await page.route('**/*.{png,jpg,jpeg,gif,svg,ico,woff,woff2,ttf,css}', route => {
|
||||
if (this._options?.blockResources) {
|
||||
await page.route('**/*.{png,jpg,jpeg,gif,svg,ico,woff,woff2,ttf,css}', (route: any) => {
|
||||
route.abort();
|
||||
});
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@ export class SimpleBrowser {
|
|||
|
||||
async goto(page: Page, url: string, options?: any): Promise<void> {
|
||||
await page.goto(url, {
|
||||
timeout: this.options?.timeout || 30000,
|
||||
timeout: this._options?.timeout || 30000,
|
||||
...options,
|
||||
});
|
||||
}
|
||||
|
|
@ -143,6 +143,7 @@ export class SimpleBrowser {
|
|||
success: false,
|
||||
error: error.message,
|
||||
url,
|
||||
data: {} as any,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -163,12 +164,4 @@ export class SimpleBrowser {
|
|||
this.initialized = false;
|
||||
}
|
||||
|
||||
private get options(): BrowserOptions {
|
||||
return {
|
||||
headless: true,
|
||||
timeout: 30000,
|
||||
blockResources: false,
|
||||
enableNetworkLogging: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue