mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-08 21:07:46 +00:00
Welcome to the grand splitting of CLI integration tests:
- replaced `test-cli` test suite with `test-e2e`
- made some small fixes along the way
- split integration tests into 3 files
- moved shared logic to `packages/cli/test/helpers/*`
- simplified `_execa` / `execa` / `execute` usage into `execCli` and `exec`
- simplified arguments required to make these work
- defaulted `execCLI` to set `NO_COLOR=1` to make assertions simpler in tests that aren't testing color/emoji support
- expanded functionality of `formatOutput` to handle error states
- centralized temp dir handling and cleanup
- enhanced `waitForPrompt` to:
- more clearly show what it was waiting for
- support waiting for regex, string, or a function that returns a boolean
- show what was the most recent thing it saw
- end early if the process it's monitoring exits
- removed some test pollution where unnecessary, shifted some into `beforeAll`
- renamed unit tests helper from `setupFixture` to `setupUnitFixture` to avoid confusion with the new shared helper `setupE2EFixture`
Some of this could be pulled out into a separate PR, but the feedback cycle is a slog, which this PR is helping to address. I'd be happy to discuss what could be pulled out, but I'd also be happy to get the whole thing through.
---
Wait for prompt failures:
<img width="939" alt="CleanShot 2023-03-27 at 10 24 21@2x" src="https://user-images.githubusercontent.com/41545/227987773-a3582549-32f9-4131-8a35-7be7cc265b66.png">
---
Current Timing:
```
Tests / test-e2e (vercel, 1, ubuntu-latest) (pull_request) Successful in 3m
Tests / test-e2e (vercel, 2, ubuntu-latest) (pull_request) Successful in 8m
Tests / test-e2e (vercel, 3, ubuntu-latest) (pull_request) Successful in 8m
```
---
Before merge, I'll mark the original `CLI` integration test suite as no longer required.
28 lines
704 B
TypeScript
28 lines
704 B
TypeScript
import path from 'path';
|
|
import fs from 'fs-extra';
|
|
import prepareFixtures from './prepare';
|
|
import getGlobalDir from './get-global-dir';
|
|
|
|
function getTmpFixturesDir() {
|
|
return path.join(getGlobalDir(), 'tmp-fixtures');
|
|
}
|
|
|
|
export async function setupE2EFixture(name: string) {
|
|
const directory = path.join(getTmpFixturesDir(), name);
|
|
const config = path.join(directory, 'project.json');
|
|
|
|
// We need to remove it, otherwise we can't re-use fixtures
|
|
if (fs.existsSync(config)) {
|
|
fs.unlinkSync(config);
|
|
}
|
|
|
|
return directory;
|
|
}
|
|
|
|
export async function prepareE2EFixtures(
|
|
contextName: string,
|
|
binaryPath: string
|
|
) {
|
|
await prepareFixtures(contextName, binaryPath, getTmpFixturesDir());
|
|
}
|