chore: add string attachments to trace (#22921)
This commit is contained in:
parent
49f647ca57
commit
59b9a39740
|
@ -116,16 +116,24 @@ export async function saveTraceFile(fileName: string, traceEvents: TraceEvent[],
|
|||
|
||||
const sha1s = new Set<string>();
|
||||
for (const event of traceEvents.filter(e => e.type === 'after') as AfterActionTraceEvent[]) {
|
||||
for (const attachment of (event.attachments || []).filter(a => !!a.path)) {
|
||||
await fs.promises.readFile(attachment.path!).then(content => {
|
||||
for (const attachment of (event.attachments || [])) {
|
||||
let contentPromise: Promise<Buffer> | undefined;
|
||||
if (attachment.path)
|
||||
contentPromise = fs.promises.readFile(attachment.path);
|
||||
else if (attachment.base64)
|
||||
contentPromise = Promise.resolve(Buffer.from(attachment.base64, 'base64'));
|
||||
if (!contentPromise)
|
||||
continue;
|
||||
|
||||
const content = await contentPromise;
|
||||
const sha1 = calculateSha1(content);
|
||||
attachment.sha1 = sha1;
|
||||
delete attachment.path;
|
||||
delete attachment.base64;
|
||||
if (sha1s.has(sha1))
|
||||
return;
|
||||
continue;
|
||||
sha1s.add(sha1);
|
||||
zipFile.addBuffer(content, 'resources/' + sha1);
|
||||
}).catch();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -332,7 +332,7 @@ export class TestInfoImpl implements TestInfo {
|
|||
|
||||
async attach(name: string, options: { path?: string, body?: string | Buffer, contentType?: string } = {}) {
|
||||
const step = this._addStep({
|
||||
title: 'attach',
|
||||
title: `attach "${name}"`,
|
||||
category: 'attach',
|
||||
wallTime: Date.now(),
|
||||
});
|
||||
|
@ -404,7 +404,7 @@ function serializeAttachments(attachments: TestInfo['attachments'], initialAttac
|
|||
name: a.name,
|
||||
contentType: a.contentType,
|
||||
path: a.path,
|
||||
body: a.body?.toString('base64'),
|
||||
base64: a.body?.toString('base64'),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
|
@ -85,7 +85,7 @@ export type AfterActionTraceEvent = {
|
|||
contentType: string;
|
||||
path?: string;
|
||||
sha1?: string;
|
||||
body?: string; // base64
|
||||
base64?: string;
|
||||
}[];
|
||||
result?: any;
|
||||
};
|
||||
|
|
|
@ -16,9 +16,7 @@
|
|||
|
||||
import { test, expect } from './ui-mode-fixtures';
|
||||
|
||||
test.describe.configure({ mode: 'parallel' });
|
||||
|
||||
test('should contain attachments', async ({ runUITest }) => {
|
||||
test('should contain file attachment', async ({ runUITest }) => {
|
||||
const { page } = await runUITest({
|
||||
'a.test.ts': `
|
||||
import { test } from '@playwright/test';
|
||||
|
@ -31,7 +29,7 @@ test('should contain attachments', async ({ runUITest }) => {
|
|||
await page.getByTitle('Run all').click();
|
||||
await expect(page.getByTestId('status-line')).toHaveText('1/1 passed (100%)');
|
||||
await page.getByText('Attachments').click();
|
||||
await page.getByText('attach', { exact: true }).click();
|
||||
await page.getByText('attach "note"', { exact: true }).click();
|
||||
const popupPromise = page.waitForEvent('popup');
|
||||
await page.getByRole('link', { name: 'note' }).click();
|
||||
const popup = await popupPromise;
|
||||
|
@ -39,3 +37,25 @@ test('should contain attachments', async ({ runUITest }) => {
|
|||
const content = await popup.content();
|
||||
expect(content).toContain('attach test');
|
||||
});
|
||||
|
||||
test('should contain string attachment', async ({ runUITest }) => {
|
||||
const { page } = await runUITest({
|
||||
'a.test.ts': `
|
||||
import { test } from '@playwright/test';
|
||||
test('attach test', async () => {
|
||||
await test.info().attach('note', { body: 'text42' });
|
||||
});
|
||||
`,
|
||||
});
|
||||
await page.getByText('attach test').click();
|
||||
await page.getByTitle('Run all').click();
|
||||
await expect(page.getByTestId('status-line')).toHaveText('1/1 passed (100%)');
|
||||
await page.getByText('Attachments').click();
|
||||
await page.getByText('attach "note"', { exact: true }).click();
|
||||
const popupPromise = page.waitForEvent('popup');
|
||||
await page.getByRole('link', { name: 'note' }).click();
|
||||
const popup = await popupPromise;
|
||||
await popup.waitForLoadState();
|
||||
const content = await popup.content();
|
||||
expect(content).toContain('text42');
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue