mirror of
https://github.com/screenci/screenci.git
synced 2026-09-19 08:57:46 +08:00
Fix test that was failing due to timing assumptions
This commit is contained in:
@@ -54,4 +54,4 @@ jobs:
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
cache-to: type=gha,mode=max,ignore-error=true
|
||||
|
||||
@@ -18,10 +18,9 @@ jobs:
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: npm
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: rm -f package-lock.json && npm install --include=dev
|
||||
|
||||
- name: Check formatting
|
||||
run: npm run format:check
|
||||
|
||||
+28
-68
@@ -391,7 +391,9 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
await vi.waitFor(() => {
|
||||
expect(mockSpawn).toHaveBeenCalled()
|
||||
})
|
||||
mockChildProcess.emit('close', 0)
|
||||
|
||||
await mainPromise
|
||||
@@ -407,7 +409,9 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
await vi.waitFor(() => {
|
||||
expect(mockSpawn).toHaveBeenCalled()
|
||||
})
|
||||
mockChildProcess.emit('close', 0)
|
||||
|
||||
await mainPromise
|
||||
@@ -444,20 +448,26 @@ describe('CLI', () => {
|
||||
.mockReturnValueOnce(mockRunProcess as unknown as ChildProcess)
|
||||
})
|
||||
|
||||
async function driveContainerSpawns(
|
||||
exitCodes: [number, number, number] = [0, 0, 0]
|
||||
) {
|
||||
await vi.waitFor(() => expect(mockSpawn).toHaveBeenCalledTimes(1))
|
||||
mockBuildProcess.emit('close', exitCodes[0])
|
||||
if (exitCodes[0] !== 0) return
|
||||
await vi.waitFor(() => expect(mockSpawn).toHaveBeenCalledTimes(2))
|
||||
mockRecordingBuildProcess.emit('close', exitCodes[1])
|
||||
if (exitCodes[1] !== 0) return
|
||||
await vi.waitFor(() => expect(mockSpawn).toHaveBeenCalledTimes(3))
|
||||
mockRunProcess.emit('close', exitCodes[2])
|
||||
}
|
||||
|
||||
it('should build and run container for record command', async () => {
|
||||
process.argv = ['node', 'cli.js', 'record']
|
||||
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -513,14 +523,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -547,14 +550,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -578,14 +574,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -604,14 +593,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -630,14 +612,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -659,14 +634,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 0)
|
||||
await driveContainerSpawns()
|
||||
|
||||
await mainPromise
|
||||
|
||||
@@ -688,8 +656,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 1)
|
||||
await driveContainerSpawns([1, 0, 0])
|
||||
|
||||
await expect(mainPromise).rejects.toThrow('process.exit called')
|
||||
expect(loggerErrorSpy).toHaveBeenCalledWith(
|
||||
@@ -703,14 +670,7 @@ describe('CLI', () => {
|
||||
const { main } = await import('./cli')
|
||||
const mainPromise = main()
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRecordingBuildProcess.emit('close', 0)
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
mockRunProcess.emit('close', 1)
|
||||
await driveContainerSpawns([0, 0, 1])
|
||||
|
||||
await expect(mainPromise).rejects.toThrow('podman exited with code 1')
|
||||
})
|
||||
|
||||
Generated
+1098
-843
File diff suppressed because it is too large
Load Diff
+3
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "screenci",
|
||||
"version": "0.0.10",
|
||||
"version": "0.0.11",
|
||||
"description": "ScreenCI",
|
||||
"keywords": [
|
||||
"screenci"
|
||||
@@ -36,7 +36,7 @@
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"postbuild": "cp Dockerfile dist/",
|
||||
"postbuild": "cp Dockerfile dist/ && sed -i '1s|.*|#!/usr/bin/env node|' dist/cli.js",
|
||||
"build:image": "podman build -t screenci .",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check .",
|
||||
@@ -62,7 +62,7 @@
|
||||
"tsx": "^4.21.0",
|
||||
"typescript": "5.9.3",
|
||||
"typescript-eslint": "^8.50.0",
|
||||
"vitest": "^4.0.16"
|
||||
"vitest": "~4.0.16"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@playwright/test": ">=1.57.0"
|
||||
|
||||
+2
-1
@@ -2,9 +2,10 @@
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"noEmit": true,
|
||||
"composite": false,
|
||||
"noUncheckedIndexedAccess": false,
|
||||
"exactOptionalPropertyTypes": false
|
||||
},
|
||||
"include": ["**/*.ts"],
|
||||
"include": ["**/*.test-d.ts"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user