Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions biome.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.2.0/schema.json",
"$schema": "https://biomejs.dev/schemas/2.2.2/schema.json",
"assist": { "actions": { "source": { "organizeImports": "on" } } },
"vcs": {
"enabled": true,
Expand All @@ -9,7 +9,13 @@
},
"files": {
"ignoreUnknown": true,
"includes": ["**", "!**/*.vue", "!**/dist", "!**/dist-types"]
"includes": [
"**",
"!**/*.vue",
"!**/dist/",
"!**/dist-types/",
"!tests/mock/tests/mockHoist.test.ts"
]
},
"formatter": {
"indentStyle": "space"
Expand Down Expand Up @@ -64,5 +70,17 @@
"useHookAtTopLevel": "off"
}
}
}
},
"overrides": [
{
"includes": ["e2e/__mocks__/**/*"],
"linter": {
"rules": {
"style": {
"useFilenamingConvention": "off"
}
}
}
}
]
}
4 changes: 4 additions & 0 deletions e2e/__mocks__/is-url.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
const { rs } = require('@rstest/core');

module.exports = () => 'is-url mock';
module.exports.fn = rs.fn();
4 changes: 4 additions & 0 deletions e2e/__mocks__/redux-cjs.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
isAction: rs.fn(),
mocked: 'redux_yes',
};
5 changes: 2 additions & 3 deletions e2e/basic/test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ describe('Index', () => {
});

it('should use require.resolve correctly', async () => {
expect(
require.resolve('../src/index.ts').endsWith('index.ts'),
).toBeTruthy();
const resolved = require.resolve('../src/index.ts');
expect(resolved.endsWith('index.ts')).toBeTruthy();
});
});
2 changes: 1 addition & 1 deletion e2e/dom/fixtures/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"react-dom": "^19.1.1"
},
"devDependencies": {
"@rsbuild/core": "1.5.0",
"@rsbuild/core": "1.5.6",
"@rsbuild/plugin-react": "^1.3.5",
"@testing-library/jest-dom": "^6.8.0",
"@testing-library/dom": "^10.4.1",
Expand Down
2 changes: 1 addition & 1 deletion e2e/lifecycle/timeout.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ describe('test timeout', () => {
),
).toBeTruthy();
expect(
logs.find((log) => log.includes('timeout.test.ts:4:10')),
logs.find((log) => log.includes('timeout.test.ts:4:1')),
).toBeTruthy();
expect(
logs.find((log) => log.includes('Test Files 1 failed')),
Expand Down
2 changes: 1 addition & 1 deletion e2e/mock/fixtures/unmock/rstest.setup.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { rs } from '@rstest/core';
// import { rs } from '@rstest/core';

process.env.NODE_ENV = 'rstest:production';

Expand Down
1 change: 1 addition & 0 deletions e2e/mock/src/bar.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const bar = 'bar';
1 change: 1 addition & 0 deletions e2e/mock/src/foo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const foo = 'foo';
4 changes: 2 additions & 2 deletions e2e/mock/src/readSomeFile.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { readFileSync } from 'node:fs';
import * as fs from 'node:fs';

export function readSomeFile(path: string) {
return readFileSync(path, 'utf-8');
return fs?.readFileSync?.(path, 'utf-8');
}
3 changes: 3 additions & 0 deletions e2e/mock/src/sum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import * as fooMod from './foo.js';

export const sum = fooMod?.foo + '1';
11 changes: 11 additions & 0 deletions e2e/mock/tests/barrel.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { expect, it, rs } from '@rstest/core';
import * as barMod from '../src/bar';
import { sum } from '../src/sum';

rs.mock('../src/foo', async () => {
return { foo: barMod.bar };
});

it('sum', () => {
expect(sum).toBe('bar1');
});
2 changes: 2 additions & 0 deletions e2e/mock/tests/doMock.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ test('doMock works', async () => {
increment: (num: number) => num + 10,
}));

rs.requireActual('../src/increment'); // Ensure the module is re-evaluated

const { increment: incrementWith10 } = await import('../src/increment');
expect(incrementWith10(1)).toBe(11);
});
Expand Down
29 changes: 26 additions & 3 deletions e2e/mock/tests/doMockRequire.test.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import { expect, rs, test } from '@rstest/core';

test('doMockRequire works', () => {
test('doMockRequire works', async () => {
const { increment: incrementWith1 } = require('../src/increment');
expect(incrementWith1(1)).toBe(2);

rs.doMockRequire('../src/increment', () => ({
increment: (num: number) => num + 10,
}));

const { increment: incrementWith10 } = require('../src/increment');
rs.requireActual('../src/increment'); // Ensure the module is re-evaluated

const { increment: incrementWith10 } = require('../src/increment');
expect(incrementWith10(1)).toBe(11);
});

test('the second doMockRequire can override the first doMockRequire', () => {
test('the second doMockRequire can override the first doMockRequire', async () => {
rs.doMockRequire('../src/increment', () => ({
increment: (num: number) => num + 10,
}));
Expand All @@ -30,3 +31,25 @@ test('the second doMockRequire can override the first doMockRequire', () => {

expect(incrementWith20(1)).toBe(21);
});

test('the third doMockRequire can override the second doMockRequire', async () => {
rs.doMockRequire('../src/increment', () => {
return {
increment: (num: number) => num + 100,
};
});

const { increment: incrementWith1 } = require('../src/increment');

expect(incrementWith1(1)).toBe(101);

rs.doMockRequire('../src/increment', () => {
return {
increment: (num: number) => num + 200,
};
});

const { increment: incrementWith20 } = require('../src/increment');

expect(incrementWith20(1)).toBe(201);
});
12 changes: 12 additions & 0 deletions e2e/mock/tests/importMock.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { expect, rs, test } from '@rstest/core';
import * as redux from 'redux';

test('importMock works', async () => {
const { default: redux } = await rs.importMock<any>('redux');
await redux.isAction('string');
expect(redux.isAction).toHaveBeenCalledWith('string');
});

test('actual redux is not mocked (ESM)', async () => {
expect(rs.isMockFunction(redux.isAction)).toBe(false);
});
23 changes: 0 additions & 23 deletions e2e/mock/tests/loadMock.test.ts

This file was deleted.

11 changes: 7 additions & 4 deletions e2e/mock/tests/mockHoist.test.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
/** biome-ignore-all assist/source/organizeImports: ../src/c should come after ../src/d */

import { expect, it, rs } from '@rstest/core';
import { c } from '../src/c';
import { d } from '../src/d';
// @ts-expect-error it's has been mocked
import { c, dd } from '../src/c';

rs.mock('../src/c', () => {
return {
c: rs.fn(),
d,
dd: d,
};
});

it('mocked c', async () => {
// @ts-expect-error: It has been mocked.
// @ts-expect-error it's has been mocked
c('c');
expect(c).toHaveBeenCalledWith('c');
expect(d).toBe(4);
expect(dd).toBe(4);
});
12 changes: 6 additions & 6 deletions e2e/mock/tests/mockRequire.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { expect, it, rs } from '@rstest/core';

rs.mockRequire('redux');
rs.mockRequire('is-url');

it('mocked redux', () => {
const redux = require('redux').default;
redux.isAction('string');
expect(redux.isAction).toHaveBeenCalledWith('string');
expect(redux.mocked).toBe('redux_yes');
it('mocked is-url', () => {
const isUrl = require('is-url');
isUrl.fn('string');
expect(isUrl.fn).toHaveBeenCalledWith('string');
expect(isUrl()).toBe('is-url mock');
});
6 changes: 1 addition & 5 deletions e2e/mock/tests/reduxMocked.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,8 @@ it('importActual works', async () => {
});

it('requireActual and importActual works together', async () => {
// const rxEsm = await rs.importActual<typeof redux>('redux');
const rxCjs = rs.requireActual<typeof redux>('redux');
expect(rs.isMockFunction(rxCjs.isAction)).toBe(false);
expect(typeof rxCjs.applyMiddleware).toBe('function');

// TODO: https://github.com/web-infra-dev/rspack/pull/11111 breaks resolved module in external function,
// which will be fixed in the near future.
// expect(rxEsm.compose).not.toBe(rxCjs.compose);
expect(redux.compose).not.toBe(rxCjs.compose);
});
19 changes: 0 additions & 19 deletions e2e/mock/tests/requireActual.test.ts

This file was deleted.

12 changes: 12 additions & 0 deletions e2e/mock/tests/requireMock.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { expect, rs, test } from '@rstest/core';

test('requireMock works', async () => {
const redux = rs.requireMock<any>('redux-cjs');
await redux.isAction('string');
expect(redux.isAction).toHaveBeenCalledWith('string');
});

test('actual redux is not mocked (CJS)', async () => {
const redux = require('redux');
expect(rs.isMockFunction(redux.isAction)).toBe(false);
});
9 changes: 7 additions & 2 deletions e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
"typecheck": "tsc --noEmit"
},
"devDependencies": {
"@rsbuild/core": "1.5.0",
"@rslib/core": "0.12.2",
"@rsbuild/core": "1.5.6",
"@rslib/core": "0.13.2",
"@rstest/core": "workspace:*",
"@rstest/tsconfig": "workspace:*",
"@types/jest-image-snapshot": "^6.4.0",
"axios": "^1.11.0",
"is-url": "^1.2.4",
"@types/is-url": "^1.2.32",
"jest-image-snapshot": "^6.5.1",
"memfs": "^4.38.2",
"pathe": "^2.0.3",
Expand All @@ -21,5 +23,8 @@
"strip-ansi": "^7.1.0",
"tinyexec": "^1.0.1",
"typescript": "^5.9.2"
},
"dependencies": {
"@types/is-url": "^1.2.32"
}
}
2 changes: 1 addition & 1 deletion e2e/projects/fixtures/packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"react-dom": "^19.1.1"
},
"devDependencies": {
"@rsbuild/core": "1.5.0",
"@rsbuild/core": "1.5.6",
"@rsbuild/plugin-react": "^1.3.5",
"@testing-library/jest-dom": "^6.8.0",
"@testing-library/dom": "^10.4.1",
Expand Down
1 change: 1 addition & 0 deletions e2e/rstest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { defineConfig } from '@rstest/core';
export default defineConfig({
setupFiles: ['../scripts/rstest.setup.ts'],
testTimeout: process.env.CI ? 10_000 : 5_000,
globals: true,
slowTestThreshold: 2_000,
output: {
externals: {
Expand Down
2 changes: 1 addition & 1 deletion e2e/test-api/fixtures/moduleNotFound.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ it('test expectNotFound error', async () => {

it('test expectNotFound error', async () => {
await expect(unexpectNotFound()).rejects.toThrowError(
/Cannot find module 'aaa'/,
'[Rstest] Cannot find module "aaa"',
);
});
4 changes: 2 additions & 2 deletions e2e/test-api/timeout.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ describe('Test timeout', () => {
logs.find((log) => log.includes('Error: test timed out in 50ms')),
).toBeTruthy();
expect(
logs.find((log) => log.includes('timeout.test.ts:5:5')),
logs.find((log) => log.includes('timeout.test.ts:5:3')),
).toBeTruthy();
expect(
logs.find((log) => log.includes('Error: test timed out in 5000ms')),
).toBeTruthy();
expect(
logs.find((log) => log.includes('timeout.test.ts:10:5')),
logs.find((log) => log.includes('timeout.test.ts:10:3')),
).toBeTruthy();
expect(logs.find((log) => log.includes('Tests 2 failed'))).toBeTruthy();
}, 10000);
Expand Down
2 changes: 1 addition & 1 deletion e2e/test-api/timeoutConfig.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ describe('Test timeout configuration', () => {
logs.find((log) => log.includes('Error: test timed out in 50ms')),
).toBeTruthy();
expect(
logs.find((log) => log.includes('timeout.test.ts:5:5')),
logs.find((log) => log.includes('timeout.test.ts:5:3')),
).toBeTruthy();

expect(
Expand Down
2 changes: 1 addition & 1 deletion e2e/vue/fixtures/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
},
"devDependencies": {
"@rstest/core": "workspace:*",
"@rsbuild/core": "1.5.0",
"@rsbuild/core": "1.5.6",
"@rsbuild/plugin-babel": "^1.0.6",
"@rsbuild/plugin-vue": "^1.1.2",
"@rsbuild/plugin-vue-jsx": "^1.1.1",
Expand Down
Loading
Loading