diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..1125854f --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,35 @@ +name: Test + +on: + push: + branches: + - master + paths-ignore: + - .github/** + - packages/templates/** + - packages/www/** + pull_request: + paths-ignore: + - .github/** + - packages/templates/** + - packages/www/** + workflow_dispatch: + +jobs: + test: + if: ${{ github.repository_owner == 'nuejs' || github.event_name == 'workflow_dispatch' }} + strategy: + matrix: + os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + + - uses: oven-sh/setup-bun@v2 + + - name: Install and test with Bun + run: | + bun -v + bun install + bun test --coverage diff --git a/.github/workflows/test.yaml.disabled b/.github/workflows/test.yaml.disabled deleted file mode 100644 index ed0dfa09..00000000 --- a/.github/workflows/test.yaml.disabled +++ /dev/null @@ -1,55 +0,0 @@ -name: Test - -on: - push: - branches: - - master - paths-ignore: - - .github/** - - packages/examples/** - - packages/nuejs.org/** - pull_request: - paths-ignore: - - .github/** - - packages/examples/** - - packages/nuejs.org/** - workflow_dispatch: - -jobs: - test: - if: ${{ github.repository_owner == 'nuejs' || github.event_name == 'workflow_dispatch' }} - strategy: - matrix: - os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] - tool: ['bun', 'node+jest'] - exclude: - - { os: 'ubuntu-latest', tool: 'node+jest' } - - { os: 'macos-latest', tool: 'node+jest' } - - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - # Testing `bun` - - uses: oven-sh/setup-bun@v2 - if: ${{ matrix.tool == 'bun' }} - - - name: Install and test with Bun - run: | - bun -v - bun install - bun test --coverage - if: ${{ matrix.tool == 'bun' }} - - # Testing `node+jest` - - uses: actions/setup-node@v4 - with: - node-version: '>= 20.8' - if: ${{ matrix.tool == 'node+jest' }} - - - name: Install and test with Node - run: | - node -v && npm -v - npm install --no-save --legacy-peer-deps "jest@>=30.0.0-alpha.4" jest-extended - npm test -- --coverage - if: ${{ matrix.tool == 'node+jest' }} diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 00000000..95b27b39 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[test] +coveragePathIgnorePatterns = ["**/test/**", "**/test_dir/**"] diff --git a/packages/nuekit/test/cmd/create.test.js b/packages/nuekit/test/cmd/create.test.js index f47abb57..58c05542 100644 --- a/packages/nuekit/test/cmd/create.test.js +++ b/packages/nuekit/test/cmd/create.test.js @@ -2,6 +2,8 @@ import { create, unzip, getLocalZip, fetchZip } from '../../src/cmd/create' import { rm, readdir } from 'node:fs/promises' +const testdir = import.meta.dirname + // suppress console messages jest.spyOn(console, 'log').mockImplementation(() => {}) @@ -10,7 +12,7 @@ afterEach(async () => { }) test('getLocalZip', async () => { - const zip = await getLocalZip('minimal', 'cmd') + const zip = await getLocalZip('minimal', testdir) expect(await zip.exists()).toBeTrue() }) @@ -21,12 +23,12 @@ test.skip('fetchZip', async () => { test('unzip', async () => { const dir = 'minimal' - const zip = await getLocalZip(dir, 'cmd') + const zip = await getLocalZip(dir, testdir) await unzip(dir, zip) const files = await readdir(dir) expect(files).toEqual([ "index.html", "index.css" ]) }) test('create', async () => { - expect(await create('minimal', { dir: 'cmd' })).toBeTrue() -}) \ No newline at end of file + expect(await create('minimal', { dir: testdir })).toBeTrue() +}) diff --git a/packages/nuekit/test/render/svg.test.js b/packages/nuekit/test/render/svg.test.js index eed46197..a2eed1a6 100644 --- a/packages/nuekit/test/render/svg.test.js +++ b/packages/nuekit/test/render/svg.test.js @@ -1,9 +1,10 @@ import { renderFonts, renderHMR, renderSVG, convertHTMLTag } from '../../src/render/svg' +const testfile = import.meta.filename test('renderFont / inlined', async () => { - const [ css ] = await renderFonts({ Test: 'render/svg.test.js' }) + const [ css ] = await renderFonts({ Test: testfile }) expect(css).toInclude('data:font/woff2;base64') expect(css.length).toBeGreaterThan(200) expect(css).toInclude('@font-face') @@ -56,7 +57,7 @@ test('renderSVG', async () => { // SVG - const svg = await renderSVG(asset, { fonts: { Test: 'render/svg.test.js' } }) + const svg = await renderSVG(asset, { fonts: { Test: testfile } }) expect(svg).toInclude("url('data:font/woff2;base64") expect(svg).toInclude(':root{--brand:#ccc}') expect(svg).toInclude('') @@ -78,4 +79,4 @@ test('custom tag', () => { expect(attr.length).toBe(4) expect(children[0].attr[0].name).toEqual('xmlns') -}) \ No newline at end of file +}) diff --git a/packages/nuestate/test/state.test.js b/packages/nuestate/test/state.test.js index eb8d0b09..07b9fcc2 100644 --- a/packages/nuestate/test/state.test.js +++ b/packages/nuestate/test/state.test.js @@ -1,6 +1,7 @@ import { getPathData, getQueryData, renderPath, renderQuery, api, state } from '../src/state.js' +beforeAll(() => global.window = null) describe('internal methods', () => {