@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
70 lines (53 loc) ⢠2.16 kB
text/typescript
import { After, AfterAll, Before, BeforeAll, Status, setDefaultTimeout } from '@cucumber/cucumber';
import { startWebServer, stopWebServer } from '../support/webServer';
import { CustomWorld } from '../support/world';
// Set default timeout for all steps to 120 seconds
setDefaultTimeout(120_000);
BeforeAll({ timeout: 120_000 }, async function () {
console.log('š Starting E2E test suite...');
const PORT = process.env.PORT ? Number(process.env.PORT) : 3010;
const BASE_URL = process.env.BASE_URL || `http://localhost:${PORT}`;
console.log(`Base URL: ${BASE_URL}`);
// Start web server if not using external BASE_URL
if (!process.env.BASE_URL) {
await startWebServer({
command: 'npm run dev',
port: PORT,
reuseExistingServer: !process.env.CI,
});
}
});
Before(async function (this: CustomWorld, { pickle }) {
await this.init();
const testId = pickle.tags.find((tag) => tag.name.startsWith('@DISCOVER-'));
console.log(`\nš Running: ${pickle.name}${testId ? ` (${testId.name.replace('@', '')})` : ''}`);
});
After(async function (this: CustomWorld, { pickle, result }) {
const testId = pickle.tags
.find((tag) => tag.name.startsWith('@DISCOVER-'))
?.name.replace('@', '');
if (result?.status === Status.FAILED) {
const screenshot = await this.takeScreenshot(`${testId || 'failure'}-${Date.now()}`);
this.attach(screenshot, 'image/png');
const html = await this.page.content();
this.attach(html, 'text/html');
if (this.testContext.jsErrors.length > 0) {
const errors = this.testContext.jsErrors.map((e) => e.message).join('\n');
this.attach(`JavaScript Errors:\n${errors}`, 'text/plain');
}
console.log(`ā Failed: ${pickle.name}`);
if (result.message) {
console.log(` Error: ${result.message}`);
}
} else if (result?.status === Status.PASSED) {
console.log(`ā
Passed: ${pickle.name}`);
}
await this.cleanup();
});
AfterAll(async function () {
console.log('\nš Test suite completed');
// Stop web server if we started it
if (!process.env.BASE_URL && process.env.CI) {
await stopWebServer();
}
});