Selaa lähdekoodia

Improve smoke tests resilience towards slow loading of modes (#3342)

Alexandru Dima 2 vuotta sitten
vanhempi
commit
1575bc8ae9
1 muutettua tiedostoa jossa 38 lisäystä ja 19 poistoa
  1. 38 19
      test/smoke/smoke.test.js

+ 38 - 19
test/smoke/smoke.test.js

@@ -54,7 +54,9 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
 			pageErrors.push(e);
 			pageErrors.push(e);
 		});
 		});
 		const response = await page.goto(URL);
 		const response = await page.goto(URL);
-		assert.ok(!!response);
+		if (!response) {
+			assert.fail('Failed to load page');
+		}
 		assert.strictEqual(response.status(), 200);
 		assert.strictEqual(response.status(), 200);
 	});
 	});
 
 
@@ -89,7 +91,7 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
 
 
 	/**
 	/**
 	 * @param {string} commandId
 	 * @param {string} commandId
-	 * @param {any} args
+	 * @param {any} [args]
 	 * @returns Promise<void>
 	 * @returns Promise<void>
 	 */
 	 */
 	async function triggerEditorCommand(commandId, args) {
 	async function triggerEditorCommand(commandId, args) {
@@ -127,27 +129,40 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
 	test('html smoke test', async () => {
 	test('html smoke test', async () => {
 		await createEditor('<title>hi</title>', 'html');
 		await createEditor('<title>hi</title>', 'html');
 
 
-		// trigger hover
-		await focusEditor();
-		await setEditorPosition(1, 3);
-		await page.keyboard.press('F1');
-		await page.keyboard.type('Show Hover');
-		await page.keyboard.press('Enter');
-
-		// check that a hover explaining the `<title>` element appears, which indicates that the language service is up and running
-		await page.waitForSelector(`text=The title element represents the document's title or name`);
+		// we need to try this a couple of times because the web worker might not be ready yet
+		for (let attempt = 1; attempt <= 2; attempt++) {
+			// trigger hover
+			await focusEditor();
+			await setEditorPosition(1, 3);
+			await page.keyboard.press('F1');
+			await page.keyboard.type('Show Hover');
+			await page.keyboard.press('Enter');
+
+			// check that a hover explaining the `<title>` element appears, which indicates that the language service is up and running
+			try {
+				await page.waitForSelector(
+					`text=The title element represents the document's title or name`,
+					{ timeout: 5000 }
+				);
+			} catch (err) {}
+		}
 	});
 	});
 
 
 	test('json smoke test', async () => {
 	test('json smoke test', async () => {
 		await createEditor('{}', 'json');
 		await createEditor('{}', 'json');
 
 
-		// trigger suggestions
-		await focusEditor();
-		await setEditorPosition(1, 2);
-		await triggerEditorCommand('editor.action.triggerSuggest');
-
-		// check that a suggestion item for `$schema` appears, which indicates that the language service is up and running
-		await page.waitForSelector(`text=$schema`);
+		// we need to try this a couple of times because the web worker might not be ready yet
+		for (let attempt = 1; attempt <= 2; attempt++) {
+			// trigger suggestions
+			await focusEditor();
+			await setEditorPosition(1, 2);
+			await triggerEditorCommand('editor.action.triggerSuggest');
+
+			// check that a suggestion item for `$schema` appears, which indicates that the language service is up and running
+			try {
+				await page.waitForSelector(`text=$schema`, { timeout: 5000 });
+			} catch (err) {}
+		}
 	});
 	});
 
 
 	test('typescript smoke test', async () => {
 	test('typescript smoke test', async () => {
@@ -156,6 +171,8 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
 		// check that a squiggle appears, which indicates that the language service is up and running
 		// check that a squiggle appears, which indicates that the language service is up and running
 		await page.waitForSelector('.squiggly-error');
 		await page.waitForSelector('.squiggly-error');
 
 
+		// at this point we know that the web worker is healthy, so we can trigger suggestions
+
 		// trigger suggestions
 		// trigger suggestions
 		await focusEditor();
 		await focusEditor();
 		await setEditorPosition(1, 11);
 		await setEditorPosition(1, 11);
@@ -169,7 +186,9 @@ suite(`Smoke Test '${TESTS_TYPE}' on '${browserType}'`, () => {
 			const url = worker.url();
 			const url = worker.url();
 			return /ts\.worker\.js$/.test(url) || /workerMain.js#typescript$/.test(url);
 			return /ts\.worker\.js$/.test(url) || /workerMain.js#typescript$/.test(url);
 		});
 		});
-		assert.ok(!!tsWorker);
+		if (!tsWorker) {
+			assert.fail('Could not find TypeScript worker');
+		}
 
 
 		// check that the TypeScript worker exposes `ts` as a global
 		// check that the TypeScript worker exposes `ts` as a global
 		assert.strictEqual(await tsWorker.evaluate(`typeof ts`), 'object');
 		assert.strictEqual(await tsWorker.evaluate(`typeof ts`), 'object');