test(core): enable no-floating-promises rule for tests (#11915)

Sometimes, missing `await` in the test code can cause timing issues, leading to test failures. This PR enables the `no-floating-promises` rule for the test code to ensure that such errors do not occur.
This commit is contained in:
L-Sun committed 2025-04-23 08:17:41 +00:00
1 parent 200015a811
commit a9ad01491c
28 files changed
+136 -121

No files matched your search

@@ -113,7 +113,7 @@ test.describe('AIBasic/Chat', () => {
},
]);
expect(page.getByTestId('chat-action-list')).toBeVisible();
await expect(page.getByTestId('chat-action-list')).toBeVisible();
await utils.chatPanel.makeChat(page, 'Nice to meet you');
await utils.chatPanel.waitForHistory(page, [
{
@@ -458,7 +458,7 @@ test.describe('AIBasic/Chat', () => {
await sendButton.click();
await expect(page.getByTestId('sidebar-tab-content-chat')).toBeVisible();
expect(await page.locator('chat-content-images')).toBeVisible();
await expect(page.locator('chat-content-images')).toBeVisible();
await utils.chatPanel.waitForHistory(page, [
{
role: 'user',
@@ -81,7 +81,7 @@ test.describe('AIChatWith/Network', () => {
'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 Line truncated
const buffer = Buffer.from(image, 'base64');
page.evaluate(() => {
await page.evaluate(() => {
delete window.showOpenFilePicker;
}, buffer);
@@ -44,7 +44,7 @@ test.describe('AIInsertion/AddToEdgelessAsNote', () => {
// Delete default note
await (await page.waitForSelector('affine-edgeless-note')).click();
page.keyboard.press('Delete');
await page.keyboard.press('Delete');
await utils.chatPanel.openChatPanel(page);
await utils.chatPanel.makeChat(page, 'Hello');
@@ -170,7 +170,7 @@ test.describe('AIInsertion/Insert', () => {
// Delete default note
await (await page.waitForSelector('affine-edgeless-note')).click();
page.keyboard.press('Delete');
await page.keyboard.press('Delete');
await utils.chatPanel.openChatPanel(page);
await utils.chatPanel.makeChat(page, 'Hello');
@@ -30,6 +30,10 @@ export class ChatPanelUtils {
await page.getByTestId('right-sidebar-toggle').click({
delay: 200,
});
await page.waitForTimeout(500); // wait the sidebar stable
}
if (await page.getByTestId('notification-close-button').isVisible()) {
await page.getByTestId('notification-close-button').click();
}
await page.getByTestId('sidebar-tab-chat').click();
await expect(page.getByTestId('sidebar-tab-content-chat')).toBeVisible();
@@ -291,14 +295,14 @@ export class ChatPanelUtils {
}
public static async enableNetworkSearch(page: Page) {
const networkSearch = await page.getByTestId('chat-network-search');
const networkSearch = page.getByTestId('chat-network-search');
if ((await networkSearch.getAttribute('data-active')) === 'false') {
await networkSearch.click();
}
}
public static async disableNetworkSearch(page: Page) {
const networkSearch = await page.getByTestId('chat-network-search');
const networkSearch = page.getByTestId('chat-network-search');
if ((await networkSearch.getAttribute('data-active')) === 'true') {
await networkSearch.click();
}
@@ -51,7 +51,7 @@ export class EditorUtils {
public static async switchToEdgelessMode(page: Page) {
const editor = await page.waitForSelector('page-editor');
await page.getByTestId('switch-edgeless-mode-button').click();
editor.waitForElementState('hidden');
await editor.waitForElementState('hidden');
await page.waitForSelector('edgeless-editor');
try {
const edgelessNotificationClose = page.getByTestId(
@@ -408,9 +408,7 @@ export class EditorUtils {
checkCodeError: this.createAction(page, () =>
page.getByTestId('action-check-code-error').click()
),
continueWithAi: async () => {
page.getByTestId('action-continue-with-ai').click();
},
continueWithAi: () => page.getByTestId('action-continue-with-ai').click(),
continueWriting: this.createAction(page, () =>
page.getByTestId('action-continue-writing').click()
),
@@ -596,9 +594,7 @@ export class EditorUtils {
checkCodeError: this.createAction(page, () =>
page.getByTestId('action-check-code-error').click()
),
continueWithAi: async () => {
page.getByTestId('action-continue-with-ai').click();
},
continueWithAi: () => page.getByTestId('action-continue-with-ai').click(),
continueWriting: this.createAction(page, () =>
page.getByTestId('action-continue-writing').click()
),
+1 -1
View File
@@ -164,7 +164,7 @@ test('can sync svg between different browsers', async ({ page, browser }) => {
const fileChooserPromise = page.waitForEvent('filechooser');
await page.keyboard.press('Enter', { delay: 50 });
const fileChooser = await fileChooserPromise;
fileChooser.setFiles(Path.dir(import.meta.url).join('logo.svg').value);
await fileChooser.setFiles(Path.dir(import.meta.url).join('logo.svg').value);
await expect(image).toBeVisible();
// the user should see the svg
+1 -1
View File
@@ -28,6 +28,6 @@ test('import from template should work', async ({ page }) => {
const btn = page.getByTestId('import-template-to-workspace-btn');
await btn.isVisible();
btn.click();
await btn.click();
await waitForEditorLoad(page);
});
@@ -48,7 +48,7 @@ test.describe('split list', () => {
listLocator.nth(2).locator('.affine-list-block__numbered')
).toHaveText('2.');
await expect(listLocator.nth(3).locator('rich-text')).toHaveText('ddd');
expect(
await expect(
listLocator.nth(3).locator('.affine-list-block__numbered')
).toHaveText('3.');
@@ -137,15 +137,14 @@ test.skip('create multi workspace in the workspace list', async ({
await expect(workspaceCards).toHaveCount(3);
}
const workspaceChangePromise = page.evaluate(() => {
new Promise(resolve => {
await page.getByTestId('draggable-item').nth(2).click();
await page.evaluate(async () => {
await new Promise(resolve => {
window.addEventListener('affine:workspace:change', resolve, {
once: true,
});
});
});
await page.getByTestId('draggable-item').nth(2).click();
await workspaceChangePromise;
const nextWorkspace = await workspace.current();
@@ -178,7 +178,7 @@ test('add mindmap into frame, then drag root node of mindmap out.', async ({
// drag out
{
const mindmapBound = await getSelectedBound(page);
pressEscape(page);
await pressEscape(page);
await clickView(page, [
mindmapBound[0] + 10,
mindmapBound[1] + 0.5 * mindmapBound[3],
+2 -2
View File
@@ -290,8 +290,8 @@ test.describe('lock', () => {
await selectAllByKeyboard(page);
await dragBetweenViewCoords(page, [100, 100], [150, 150]);
assertEdgelessElementBound(page, frame, [100, 100, 200, 200]);
assertEdgelessElementBound(page, shape, [150, 150, 50, 50]);
await assertEdgelessElementBound(page, frame, [100, 100, 200, 200]);
await assertEdgelessElementBound(page, shape, [150, 150, 50, 50]);
});
test('locked element should not be scalable and rotatable. unlocking will recover', async ({
@@ -196,7 +196,7 @@ test.describe('Embed synced doc in edgeless mode', () => {
await expect(edgelessNotes).toHaveCount(2);
expect(await getSelectedIds(page)).toHaveLength(1);
expect(await getSelectedIds(page)).not.toContain(prevIds);
expect(edgelessNotes.last()).toBeVisible();
await expect(edgelessNotes.last()).toBeVisible();
const noteBound = await getSelectedBound(page);
expect(isIntersected(embedDocBound, noteBound)).toBe(false);
@@ -27,7 +27,7 @@ export async function initEmbedSyncedDocState(
}
return await page.evaluate(
({ data, option }) => {
async ({ data, option }) => {
const createDoc = async (
docId: string,
title: string,
@@ -69,11 +69,13 @@ export async function initEmbedSyncedDocState(
return note ?? null;
};
const docIds = data.map(({ title, content }, index) => {
const id = index === 0 ? window.doc.id : `embed-doc-${index}`;
createDoc(id, title, content);
return id;
});
const docIds = await Promise.all(
data.map(async ({ title, content }, index) => {
const id = index === 0 ? window.doc.id : `embed-doc-${index}`;
await createDoc(id, title, content);
return id;
})
);
const { NoteBlockModel, NoteDisplayMode } =
window.$blocksuite.affineModel;
+1 -1
View File
@@ -473,7 +473,7 @@ export async function createEdgelessNoteBlock(
) {
await setEdgelessTool(page, 'note', undefined, editorIndex);
if (position.length === 4) {
dragView(
await dragView(
page,
[position[0], position[1]],
[position[0] + position[2], position[1] + position[3]]
+1 -1
View File
@@ -122,7 +122,7 @@ export const addCustomProperty = async (
root: Locator | Page,
type: string
) => {
ensureAddPropertyButtonVisible(page, root);
await ensureAddPropertyButtonVisible(page, root);
await clickAddPropertyButton(root);
await page
.locator(