chore: update error message when using wrong cli (#23512)

Now recommends uninstalling other packages. Fixes #23314.

Example messages:

```
Please install @playwright/test package before running "npx playwright show-report"
  npm uninstall playwright playwright-firefox
  npm install -D @playwright/test
```

```
Please install @playwright/test package before running "yarn playwright show-report"
  yarn remove playwright playwright-chromium playwright-firefox playwright-webkit
  yarn add -D @playwright/test
```

```
Please install @playwright/test package before running "pnpm exec playwright show-report"
  pnpm remove playwright
  pnpm add -D @playwright/test
```
This commit is contained in:
Dmitry Gozman 2023-06-05 09:51:08 -07:00 committed by GitHub
parent 80fe9748eb
commit b518d1f6da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 17 deletions

View File

@ -18,14 +18,41 @@
/* eslint-disable no-console */ /* eslint-disable no-console */
import { getPackageManager } from '../utils';
import program from './program'; import program from './program';
function printPlaywrightTestError(command: string) {
const packages: string[] = [];
for (const pkg of ['playwright', 'playwright-chromium', 'playwright-firefox', 'playwright-webkit']) {
try {
require.resolve(pkg);
packages.push(pkg);
} catch (e) {
}
}
if (!packages.length)
packages.push('playwright');
const packageManager = getPackageManager();
if (packageManager === 'yarn') {
console.error(`Please install @playwright/test package before running "yarn playwright ${command}"`);
console.error(` yarn remove ${packages.join(' ')}`);
console.error(' yarn add -D @playwright/test');
} else if (packageManager === 'pnpm') {
console.error(`Please install @playwright/test package before running "pnpm exec playwright ${command}"`);
console.error(` pnpm remove ${packages.join(' ')}`);
console.error(' pnpm add -D @playwright/test');
} else {
console.error(`Please install @playwright/test package before running "npx playwright ${command}"`);
console.error(` npm uninstall ${packages.join(' ')}`);
console.error(' npm install -D @playwright/test');
}
}
{ {
const command = program.command('test').allowUnknownOption(true); const command = program.command('test').allowUnknownOption(true);
command.description('Run tests with Playwright Test. Available in @playwright/test package.'); command.description('Run tests with Playwright Test. Available in @playwright/test package.');
command.action(async () => { command.action(async () => {
console.error('Please install @playwright/test package to use Playwright Test.'); printPlaywrightTestError('test');
console.error(' npm install -D @playwright/test');
process.exit(1); process.exit(1);
}); });
} }
@ -34,18 +61,7 @@ import program from './program';
const command = program.command('show-report').allowUnknownOption(true); const command = program.command('show-report').allowUnknownOption(true);
command.description('Show Playwright Test HTML report. Available in @playwright/test package.'); command.description('Show Playwright Test HTML report. Available in @playwright/test package.');
command.action(async () => { command.action(async () => {
console.error('Please install @playwright/test package to use Playwright Test.'); printPlaywrightTestError('show-report');
console.error(' npm install -D @playwright/test');
process.exit(1);
});
}
{
const command = program.command('show-trace').allowUnknownOption(true);
command.description('Show Playwright Trace. Available in @playwright/test package.');
command.action(async () => {
console.error('Please install @playwright/test package to use Playwright Test.');
console.error(' npm install -D @playwright/test');
process.exit(1); process.exit(1);
}); });
} }

View File

@ -617,7 +617,6 @@ export class Registry {
return undefined; return undefined;
const location = prefixes.length ? ` at ${path.join(prefixes[0], suffix)}` : ``; const location = prefixes.length ? ` at ${path.join(prefixes[0], suffix)}` : ``;
// TODO: language-specific error message
const installation = install ? `\nRun "${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}"` : ''; const installation = install ? `\nRun "${buildPlaywrightCLICommand(sdkLanguage, 'install ' + name)}"` : '';
throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`); throw new Error(`Chromium distribution '${name}' is not found${location}${installation}`);
}; };

View File

@ -25,3 +25,12 @@ export function getAsBooleanFromENV(name: string): boolean {
const value = getFromENV(name); const value = getFromENV(name);
return !!value && value !== 'false' && value !== '0'; return !!value && value !== 'false' && value !== '0';
} }
export function getPackageManager() {
const env = process.env.npm_config_user_agent || '';
if (env.includes('yarn'))
return 'yarn';
if (env.includes('pnpm'))
return 'pnpm';
return 'npm';
}

View File

@ -45,6 +45,6 @@ for (const cdn of CDNS) {
if (nodeMajorVersion >= 14) if (nodeMajorVersion >= 14)
await exec('node esm-playwright.mjs'); await exec('node esm-playwright.mjs');
const stdio = await exec('npx playwright', 'test', '-c', '.', { expectToExitWithError: true }); const stdio = await exec('npx playwright', 'test', '-c', '.', { expectToExitWithError: true });
expect(stdio).toContain(`Please install @playwright/test package to use Playwright Test.`); expect(stdio).toContain(`Please install @playwright/test package`);
}); });
} }

View File

@ -23,5 +23,5 @@ test(`playwright should work`, async ({ exec, nodeMajorVersion, installedSoftwar
if (nodeMajorVersion >= 14) if (nodeMajorVersion >= 14)
await exec('node esm-playwright.mjs'); await exec('node esm-playwright.mjs');
const stdio = await exec('npx playwright', 'test', '-c', '.', { expectToExitWithError: true }); const stdio = await exec('npx playwright', 'test', '-c', '.', { expectToExitWithError: true });
expect(stdio).toContain(`Please install @playwright/test package to use Playwright Test.`); expect(stdio).toContain(`Please install @playwright/test package`);
}); });