Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: make tests OS agnostic #616

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
75 changes: 39 additions & 36 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -1,61 +1,64 @@
name: Tests
on:
push:
branches:
- main
- next
- v1
branches: [main, next, v1]
pull_request:
branches:
- main
- next
- v1
branches: [main, next, v1]
jobs:
unit:
name: API Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: 20
- uses: pnpm/action-setup@v2
with:
version: 8
- name: Download deps
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: pnpm i
- name: Build packages
run: pnpm run build
- name: Run tests
- name: Run Vitest tests
run: pnpm exec vitest
- name: Typecheck
- name: Run Typecheck
run: pnpm -r run typecheck

e2e:
name: E2E Tests
runs-on: ubuntu-latest
timeout-minutes: 60
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
browser: [chromium, firefox, webkit]
node: [18, 20, 22]
exclude:
- os: macos-latest
browser: firefox
- os: windows-latest
browser: firefox
- os: windows-latest
browser: webkit
steps:
- name: Checkout repo
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 20
- uses: pnpm/action-setup@v2
uses: actions/setup-node@v4
with:
version: 8
- name: Download deps
node-version: ${{ matrix.node }}
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: pnpm i
- name: Install Playwright
run: pnpm exec playwright install --with-deps
- name: Run tests
run: pnpm exec playwright test
- name: Upload test result
uses: actions/upload-artifact@v2
if: always()
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps ${{ matrix.browser }}
- name: Run Playwright tests
run: pnpm exec playwright test --project=${{ matrix.browser }}
- name: Upload report to GitHub Actions Artifacts
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: test-results
name: playwright-report-${{ matrix.os }}-node${{ matrix.node }}-${{ matrix.browser }}
path: test-results/
retention-days: 30
retention-days: 14
17 changes: 8 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Logs
logs
*.log
logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
Expand All @@ -9,20 +9,20 @@ yarn-error.log*
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock
*.seed
pids

# Build result
/packages/*/*.js
!/packages/*/rollup.config.js
/packages/*/_virtual
/packages/*/*.cjs
/packages/*/*.mjs
/packages/*/*.d.ts
/packages/*/README
/packages/*/*.js
/packages/*/*.mjs
/packages/*/LICENSE
/packages/*/_virtual
/packages/*/README

# Anything built
build/
Expand All @@ -41,10 +41,9 @@ node_modules/

# Output of 'npm pack'
*.tgz
/test-results/
/playwright-report/
/playwright/.cache/
/test-results/

# DS Store
.DS_Store
**/.DS_Store
6 changes: 2 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"@conform-to/validitystate": "workspace:*",
"@conform-to/yup": "workspace:*",
"@conform-to/zod": "workspace:*",
"@playwright/test": "^1.40.1",
"@playwright/test": "^1.44.0",
"@remix-run/eslint-config": "^1.19.3",
"@remix-run/node": "^1.19.3",
"@types/node": "^20.10.4",
Expand All @@ -32,9 +32,7 @@
"yup": "^0.32.11",
"zod": "3.21.4"
},
"engines": {
"node": "20.x"
},
"packageManager": "pnpm@9.1.0+sha256.22e36fba7f4880ecf749a5ca128b8435da085ecd49575e7fb9e64d6bf4fad394",
lifeiscontent marked this conversation as resolved.
Show resolved Hide resolved
"lint-staged": {
"*.{js,jsx,ts,tsx}": "eslint --ignore-path .gitignore --cache --ext .js,.jsx,.ts,.tsx",
"*.{js,jsx,ts,tsx,css,json,yaml}": "prettier --ignore-path .gitignore --write"
Expand Down
4 changes: 2 additions & 2 deletions playground/app/routes/subscription.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export async function loader({ request }: LoaderFunctionArgs) {

return {
noClientValidate: url.searchParams.get('noClientValidate') === 'yes',
isStrcitMode: Boolean(process.env.CI),
isStrictMode: Boolean(process.env.NODE_ENV === 'production'),
};
}

Expand All @@ -54,7 +54,7 @@ export async function action({ request }: ActionFunctionArgs) {
}

export default function Example() {
const { noClientValidate, isStrcitMode: strict } =
const { noClientValidate, isStrictMode: strict } =
useLoaderData<typeof loader>();
const actionData = useActionData<typeof action>();
const [form, fields] = useForm({
Expand Down
Binary file added playground/public/favicon.ico
Binary file not shown.
46 changes: 7 additions & 39 deletions playwright.config.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,10 @@
import { type PlaywrightTestConfig } from '@playwright/test';
import { devices } from '@playwright/test';

/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// require('dotenv').config();
import { defineConfig, devices } from '@playwright/test';

/**
* See https://playwright.dev/docs/test-configuration.
*/
const config: PlaywrightTestConfig = {
export default defineConfig({
testDir: './tests/integrations',
/* Maximum time one test can run for. */
lifeiscontent marked this conversation as resolved.
Show resolved Hide resolved
timeout: 30 * 1000,
expect: {
/**
* Maximum time expect() should wait for the condition to be met.
* For example in `await expect(locator).toHaveText();`
*/
timeout: 5000,
},
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
Expand All @@ -30,14 +14,9 @@ const config: PlaywrightTestConfig = {
/* Opt out of parallel tests on CI. */
workers: process.env.CI ? 1 : undefined,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
// reporter: 'html',
reporter: process.env.CI ? 'github' : 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */
actionTimeout: 0,
/* Base URL to use in actions like `await page.goto('/')`. */
// baseURL: 'http://localhost:3000',

/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
/* Take screenshot on testrun failure. */
Expand All @@ -48,29 +27,20 @@ const config: PlaywrightTestConfig = {
projects: [
{
name: 'chromium',
use: {
...devices['Desktop Chrome'],
},
use: devices['Desktop Chrome'],
},

{
name: 'firefox',
use: {
...devices['Desktop Firefox'],
},
use: devices['Desktop Firefox'],
},

{
name: 'webkit',
use: {
...devices['Desktop Safari'],
},
use: devices['Desktop Safari'],
},
],

/* Folder for test artifacts such as screenshots, videos, traces, etc. */
outputDir: 'test-results/',

/* Run your local dev server before starting the tests */
webServer: {
command: 'pnpm --filter=./playground start',
Expand All @@ -79,6 +49,4 @@ const config: PlaywrightTestConfig = {
stderr: 'pipe',
stdout: 'pipe',
},
};

export default config;
});